1This is doc/gcc.info, produced by makeinfo version 4.12 from
2/space/rguenther/gcc-4.8.5/gcc-4.8.5/gcc/doc/gcc.texi.
3
4Copyright (C) 1988-2015 Free Software Foundation, Inc.
5
6 Permission is granted to copy, distribute and/or modify this document
7under the terms of the GNU Free Documentation License, Version 1.3 or
8any later version published by the Free Software Foundation; with the
9Invariant Sections being "Funding Free Software", the Front-Cover Texts
10being (a) (see below), and with the Back-Cover Texts being (b) (see
11below).  A copy of the license is included in the section entitled "GNU
12Free Documentation License".
13
14 (a) The FSF's Front-Cover Text is:
15
16 A GNU Manual
17
18 (b) The FSF's Back-Cover Text is:
19
20 You have freedom to copy and modify this GNU Manual, like GNU
21software.  Copies published by the Free Software Foundation raise
22funds for GNU development.
23
24INFO-DIR-SECTION Software development
25START-INFO-DIR-ENTRY
26* gcc: (gcc).                  The GNU Compiler Collection.
27* g++: (gcc).                  The GNU C++ compiler.
28* gcov: (gcc) Gcov.            `gcov'--a test coverage program.
29END-INFO-DIR-ENTRY
30 This file documents the use of the GNU compilers.
31
32 Copyright (C) 1988-2015 Free Software Foundation, Inc.
33
34 Permission is granted to copy, distribute and/or modify this document
35under the terms of the GNU Free Documentation License, Version 1.3 or
36any later version published by the Free Software Foundation; with the
37Invariant Sections being "Funding Free Software", the Front-Cover Texts
38being (a) (see below), and with the Back-Cover Texts being (b) (see
39below).  A copy of the license is included in the section entitled "GNU
40Free Documentation License".
41
42 (a) The FSF's Front-Cover Text is:
43
44 A GNU Manual
45
46 (b) The FSF's Back-Cover Text is:
47
48 You have freedom to copy and modify this GNU Manual, like GNU
49software.  Copies published by the Free Software Foundation raise
50funds for GNU development.
51
52
53
54File: gcc.info,  Node: Top,  Next: G++ and GCC,  Up: (DIR)
55
56Introduction
57************
58
59This manual documents how to use the GNU compilers, as well as their
60features and incompatibilities, and how to report bugs.  It corresponds
61to the compilers (GCC) version 4.8.5.  The internals of the GNU
62compilers, including how to port them to new targets and some
63information about how to write front ends for new languages, are
64documented in a separate manual.  *Note Introduction: (gccint)Top.
65
66* Menu:
67
68* G++ and GCC::     You can compile C or C++ programs.
69* Standards::       Language standards supported by GCC.
70* Invoking GCC::    Command options supported by `gcc'.
71* C Implementation:: How GCC implements the ISO C specification.
72* C++ Implementation:: How GCC implements the ISO C++ specification.
73* C Extensions::    GNU extensions to the C language family.
74* C++ Extensions::  GNU extensions to the C++ language.
75* Objective-C::     GNU Objective-C runtime features.
76* Compatibility::   Binary Compatibility
77* Gcov::            `gcov'---a test coverage program.
78* Trouble::         If you have trouble using GCC.
79* Bugs::            How, why and where to report bugs.
80* Service::         How to find suppliers of support for GCC.
81* Contributing::    How to contribute to testing and developing GCC.
82
83* Funding::         How to help assure funding for free software.
84* GNU Project::     The GNU Project and GNU/Linux.
85
86* Copying::         GNU General Public License says
87                    how you can copy and share GCC.
88* GNU Free Documentation License:: How you can copy and share this manual.
89* Contributors::    People who have contributed to GCC.
90
91* Option Index::    Index to command line options.
92* Keyword Index::   Index of concepts and symbol names.
93
94
95File: gcc.info,  Node: G++ and GCC,  Next: Standards,  Prev: Top,  Up: Top
96
971 Programming Languages Supported by GCC
98****************************************
99
100GCC stands for "GNU Compiler Collection".  GCC is an integrated
101distribution of compilers for several major programming languages.
102These languages currently include C, C++, Objective-C, Objective-C++,
103Java, Fortran, Ada, and Go.
104
105 The abbreviation "GCC" has multiple meanings in common use.  The
106current official meaning is "GNU Compiler Collection", which refers
107generically to the complete suite of tools.  The name historically stood
108for "GNU C Compiler", and this usage is still common when the emphasis
109is on compiling C programs.  Finally, the name is also used when
110speaking of the "language-independent" component of GCC: code shared
111among the compilers for all supported languages.
112
113 The language-independent component of GCC includes the majority of the
114optimizers, as well as the "back ends" that generate machine code for
115various processors.
116
117 The part of a compiler that is specific to a particular language is
118called the "front end".  In addition to the front ends that are
119integrated components of GCC, there are several other front ends that
120are maintained separately.  These support languages such as Pascal,
121Mercury, and COBOL.  To use these, they must be built together with GCC
122proper.
123
124 Most of the compilers for languages other than C have their own names.
125The C++ compiler is G++, the Ada compiler is GNAT, and so on.  When we
126talk about compiling one of those languages, we might refer to that
127compiler by its own name, or as GCC.  Either is correct.
128
129 Historically, compilers for many languages, including C++ and Fortran,
130have been implemented as "preprocessors" which emit another high level
131language such as C.  None of the compilers included in GCC are
132implemented this way; they all generate machine code directly.  This
133sort of preprocessor should not be confused with the "C preprocessor",
134which is an integral feature of the C, C++, Objective-C and
135Objective-C++ languages.
136
137
138File: gcc.info,  Node: Standards,  Next: Invoking GCC,  Prev: G++ and GCC,  Up: Top
139
1402 Language Standards Supported by GCC
141*************************************
142
143For each language compiled by GCC for which there is a standard, GCC
144attempts to follow one or more versions of that standard, possibly with
145some exceptions, and possibly with some extensions.
146
1472.1 C language
148==============
149
150GCC supports three versions of the C standard, although support for the
151most recent version is not yet complete.
152
153 The original ANSI C standard (X3.159-1989) was ratified in 1989 and
154published in 1990.  This standard was ratified as an ISO standard
155(ISO/IEC 9899:1990) later in 1990.  There were no technical differences
156between these publications, although the sections of the ANSI standard
157were renumbered and became clauses in the ISO standard.  This standard,
158in both its forms, is commonly known as "C89", or occasionally as
159"C90", from the dates of ratification.  The ANSI standard, but not the
160ISO standard, also came with a Rationale document.  To select this
161standard in GCC, use one of the options `-ansi', `-std=c90' or
162`-std=iso9899:1990'; to obtain all the diagnostics required by the
163standard, you should also specify `-pedantic' (or `-pedantic-errors' if
164you want them to be errors rather than warnings).  *Note Options
165Controlling C Dialect: C Dialect Options.
166
167 Errors in the 1990 ISO C standard were corrected in two Technical
168Corrigenda published in 1994 and 1996.  GCC does not support the
169uncorrected version.
170
171 An amendment to the 1990 standard was published in 1995.  This
172amendment added digraphs and `__STDC_VERSION__' to the language, but
173otherwise concerned the library.  This amendment is commonly known as
174"AMD1"; the amended standard is sometimes known as "C94" or "C95".  To
175select this standard in GCC, use the option `-std=iso9899:199409'
176(with, as for other standard versions, `-pedantic' to receive all
177required diagnostics).
178
179 A new edition of the ISO C standard was published in 1999 as ISO/IEC
1809899:1999, and is commonly known as "C99".  GCC has incomplete support
181for this standard version; see `http://gcc.gnu.org/c99status.html' for
182details.  To select this standard, use `-std=c99' or
183`-std=iso9899:1999'.  (While in development, drafts of this standard
184version were referred to as "C9X".)
185
186 Errors in the 1999 ISO C standard were corrected in three Technical
187Corrigenda published in 2001, 2004 and 2007.  GCC does not support the
188uncorrected version.
189
190 A fourth version of the C standard, known as "C11", was published in
1912011 as ISO/IEC 9899:2011.  GCC has limited incomplete support for
192parts of this standard, enabled with `-std=c11' or `-std=iso9899:2011'.
193(While in development, drafts of this standard version were referred to
194as "C1X".)
195
196 By default, GCC provides some extensions to the C language that on
197rare occasions conflict with the C standard.  *Note Extensions to the C
198Language Family: C Extensions.  Use of the `-std' options listed above
199will disable these extensions where they conflict with the C standard
200version selected.  You may also select an extended version of the C
201language explicitly with `-std=gnu90' (for C90 with GNU extensions),
202`-std=gnu99' (for C99 with GNU extensions) or `-std=gnu11' (for C11
203with GNU extensions).  The default, if no C language dialect options
204are given, is `-std=gnu90'; this will change to `-std=gnu99' or
205`-std=gnu11' in some future release when the C99 or C11 support is
206complete.  Some features that are part of the C99 standard are accepted
207as extensions in C90 mode, and some features that are part of the C11
208standard are accepted as extensions in C90 and C99 modes.
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>'; since C99,
216also those in `<stdbool.h>' and `<stdint.h>'; and since C11, also those
217in `<stdalign.h>' and `<stdnoreturn.h>'.  In addition, complex types,
218added in C99, are not required for freestanding implementations.  The
219standard also defines two environments for programs, a "freestanding
220environment", required of all implementations and which may not have
221library facilities beyond those required of freestanding
222implementations, where the handling of program startup and termination
223are implementation-defined, and a "hosted environment", which is not
224required, in which all the library facilities are provided and startup
225is through a function `int main (void)' or `int main (int, char *[])'.
226An OS kernel would be a freestanding environment; a program using the
227facilities of an operating system would normally be in a hosted
228implementation.
229
230 GCC aims towards being usable as a conforming freestanding
231implementation, or as the compiler for a conforming hosted
232implementation.  By default, it will act as the compiler for a hosted
233implementation, defining `__STDC_HOSTED__' as `1' and presuming that
234when the names of ISO C functions are used, they have the semantics
235defined in the standard.  To make it act as a conforming freestanding
236implementation for a freestanding environment, use the option
237`-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not
238make assumptions about the meanings of function names from the standard
239library, with exceptions noted below.  To build an OS kernel, you may
240well still need to make your own arrangements for linking and startup.
241*Note Options Controlling C Dialect: C Dialect Options.
242
243 GCC does not provide the library facilities required only of hosted
244implementations, nor yet all the facilities required by C99 of
245freestanding implementations; to use the facilities of a hosted
246environment, you will need to find them elsewhere (for example, in the
247GNU C library).  *Note Standard Libraries: Standard Libraries.
248
249 Most of the compiler support routines used by GCC are present in
250`libgcc', but there are a few exceptions.  GCC requires the
251freestanding environment provide `memcpy', `memmove', `memset' and
252`memcmp'.  Finally, if `__builtin_trap' is used, and the target does
253not implement the `trap' pattern, then GCC will emit a call to `abort'.
254
255 For references to Technical Corrigenda, Rationale documents and
256information concerning the history of C that is available online, see
257`http://gcc.gnu.org/readings.html'
258
2592.2 C++ language
260================
261
262GCC supports the original ISO C++ standard (1998) and contains
263experimental support for the second ISO C++ standard (2011).
264
265 The original ISO C++ standard was published as the ISO standard
266(ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in
2672003 (ISO/IEC 14882:2003). These standards are referred to as C++98 and
268C++03, respectively. GCC implements the majority of C++98 (`export' is
269a notable exception) and most of the changes in C++03.  To select this
270standard in GCC, use one of the options `-ansi', `-std=c++98', or
271`-std=c++03'; to obtain all the diagnostics required by the standard,
272you should also specify `-pedantic' (or `-pedantic-errors' if you want
273them to be errors rather than warnings).
274
275 A revised ISO C++ standard was published in 2011 as ISO/IEC
27614882:2011, and is referred to as C++11; before its publication it was
277commonly referred to as C++0x.  C++11 contains several changes to the
278C++ language, most of which have been implemented in an experimental
279C++11 mode in GCC.  For information regarding the C++11 features
280available in the experimental C++11 mode, see
281`http://gcc.gnu.org/projects/cxx0x.html'. To select this standard in
282GCC, use the option `-std=c++11'; to obtain all the diagnostics
283required by the standard, you should also specify `-pedantic' (or
284`-pedantic-errors' if you want them to be errors rather than warnings).
285
286 More information about the C++ standards is available on the ISO C++
287committee's web site at `http://www.open-std.org/jtc1/sc22/wg21/'.
288
289 By default, GCC provides some extensions to the C++ language; *Note
290Options Controlling C++ Dialect: C++ Dialect Options.  Use of the
291`-std' option listed above will disable these extensions.  You may also
292select an extended version of the C++ language explicitly with
293`-std=gnu++98' (for C++98 with GNU extensions) or `-std=gnu++11' (for
294C++11 with GNU extensions).  The default, if no C++ language dialect
295options are given, is `-std=gnu++98'.
296
2972.3 Objective-C and Objective-C++ languages
298===========================================
299
300GCC supports "traditional" Objective-C (also known as "Objective-C
3011.0") and contains support for the Objective-C exception and
302synchronization syntax.  It has also support for a number of
303"Objective-C 2.0" language extensions, including properties, fast
304enumeration (only for Objective-C), method attributes and the @optional
305and @required keywords in protocols.  GCC supports Objective-C++ and
306features available in Objective-C are also available in Objective-C++.
307
308 GCC by default uses the GNU Objective-C runtime library, which is part
309of GCC and is not the same as the Apple/NeXT Objective-C runtime
310library used on Apple systems.  There are a number of differences
311documented in this manual.  The options `-fgnu-runtime' and
312`-fnext-runtime' allow you to switch between producing output that
313works with the GNU Objective-C runtime library and output that works
314with the Apple/NeXT Objective-C runtime library.
315
316 There is no formal written standard for Objective-C or Objective-C++.
317The authoritative manual on traditional Objective-C (1.0) is
318"Object-Oriented Programming and the Objective-C Language", available
319at a number of web sites:
320   * `http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf'
321     is the original NeXTstep document;
322
323   * `http://objc.toodarkpark.net' is the same document in another
324     format;
325
326   *
327     `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/'
328     has an updated version but make sure you search for "Object
329     Oriented Programming and the Objective-C Programming Language 1.0",
330     not documentation on the newer "Objective-C 2.0" language
331
332 The Objective-C exception and synchronization syntax (that is, the
333keywords @try, @throw, @catch, @finally and @synchronized) is supported
334by GCC and is enabled with the option `-fobjc-exceptions'.  The syntax
335is briefly documented in this manual and in the Objective-C 2.0 manuals
336from Apple.
337
338 The Objective-C 2.0 language extensions and features are automatically
339enabled; they include properties (via the @property, @synthesize and
340@dynamic keywords), fast enumeration (not available in Objective-C++),
341attributes for methods (such as deprecated, noreturn, sentinel,
342format), the unused attribute for method arguments, the @package
343keyword for instance variables and the @optional and @required keywords
344in protocols.  You can disable all these Objective-C 2.0 language
345extensions with the option `-fobjc-std=objc1', which causes the
346compiler to recognize the same Objective-C language syntax recognized
347by GCC 4.0, and to produce an error if one of the new features is used.
348
349 GCC has currently no support for non-fragile instance variables.
350
351 The authoritative manual on Objective-C 2.0 is available from Apple:
352   *
353     `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/'
354
355 For more information concerning the history of Objective-C that is
356available online, see `http://gcc.gnu.org/readings.html'
357
3582.4 Go language
359===============
360
361As of the GCC 4.7.1 release, GCC supports the Go 1 language standard,
362described at `http://golang.org/doc/go1.html'.
363
3642.5 References for other languages
365==================================
366
367*Note GNAT Reference Manual: (gnat_rm)Top, for information on standard
368conformance and compatibility of the Ada compiler.
369
370 *Note Standards: (gfortran)Standards, for details of standards
371supported by GNU Fortran.
372
373 *Note Compatibility with the Java Platform: (gcj)Compatibility, for
374details of compatibility between `gcj' and the Java Platform.
375
376
377File: gcc.info,  Node: Invoking GCC,  Next: C Implementation,  Prev: Standards,  Up: Top
378
3793 GCC Command Options
380*********************
381
382When you invoke GCC, it normally does preprocessing, compilation,
383assembly and linking.  The "overall options" allow you to stop this
384process at an intermediate stage.  For example, the `-c' option says
385not to run the linker.  Then the output consists of object files output
386by the assembler.
387
388 Other options are passed on to one stage of processing.  Some options
389control the preprocessor and others the compiler itself.  Yet other
390options control the assembler and linker; most of these are not
391documented here, since you rarely need to use any of them.
392
393 Most of the command-line options that you can use with GCC are useful
394for C programs; when an option is only useful with another language
395(usually C++), the explanation says so explicitly.  If the description
396for a particular option does not mention a source language, you can use
397that option with all supported languages.
398
399 *Note Compiling C++ Programs: Invoking G++, for a summary of special
400options for compiling C++ programs.
401
402 The `gcc' program accepts options and file names as operands.  Many
403options have multi-letter names; therefore multiple single-letter
404options may _not_ be grouped: `-dv' is very different from `-d -v'.
405
406 You can mix options and other arguments.  For the most part, the order
407you use doesn't matter.  Order does matter when you use several options
408of the same kind; for example, if you specify `-L' more than once, the
409directories are searched in the order specified.  Also, the placement
410of the `-l' option is significant.
411
412 Many options have long names starting with `-f' or with `-W'--for
413example, `-fmove-loop-invariants', `-Wformat' and so on.  Most of these
414have both positive and negative forms; the negative form of `-ffoo' is
415`-fno-foo'.  This manual documents only one of these two forms,
416whichever one is not the default.
417
418 *Note Option Index::, for an index to GCC's options.
419
420* Menu:
421
422* Option Summary::      Brief list of all options, without explanations.
423* Overall Options::     Controlling the kind of output:
424                        an executable, object files, assembler files,
425                        or preprocessed source.
426* Invoking G++::        Compiling C++ programs.
427* C Dialect Options::   Controlling the variant of C language compiled.
428* C++ Dialect Options:: Variations on C++.
429* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
430                        and Objective-C++.
431* Language Independent Options:: Controlling how diagnostics should be
432                        formatted.
433* Warning Options::     How picky should the compiler be?
434* Debugging Options::   Symbol tables, measurements, and debugging dumps.
435* Optimize Options::    How much optimization?
436* Preprocessor Options:: Controlling header files and macro definitions.
437                         Also, getting dependency information for Make.
438* Assembler Options::   Passing options to the assembler.
439* Link Options::        Specifying libraries and so on.
440* Directory Options::   Where to find header files and libraries.
441                        Where to find the compiler executable files.
442* Spec Files::          How to pass switches to sub-processes.
443* Target Options::      Running a cross-compiler, or an old version of GCC.
444* Submodel Options::    Specifying minor hardware or convention variations,
445                        such as 68010 vs 68020.
446* Code Gen Options::    Specifying conventions for function calls, data layout
447                        and register usage.
448* Environment Variables:: Env vars that affect GCC.
449* Precompiled Headers:: Compiling a header once, and using it many times.
450
451
452File: gcc.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking GCC
453
4543.1 Option Summary
455==================
456
457Here is a summary of all the options, grouped by type.  Explanations are
458in the following sections.
459
460_Overall Options_
461     *Note Options Controlling the Kind of Output: Overall Options.
462          -c  -S  -E  -o FILE  -no-canonical-prefixes
463          -pipe  -pass-exit-codes
464          -x LANGUAGE  -v  -###  --help[=CLASS[,...]]  --target-help
465          --version -wrapper @FILE -fplugin=FILE -fplugin-arg-NAME=ARG
466          -fdump-ada-spec[-slim] -fada-spec-parent=UNIT -fdump-go-spec=FILE
467
468_C Language Options_
469     *Note Options Controlling C Dialect: C Dialect Options.
470          -ansi  -std=STANDARD  -fgnu89-inline
471          -aux-info FILENAME -fallow-parameterless-variadic-functions
472          -fno-asm  -fno-builtin  -fno-builtin-FUNCTION
473          -fhosted  -ffreestanding -fopenmp -fms-extensions -fplan9-extensions
474          -trigraphs  -traditional  -traditional-cpp
475          -fallow-single-precision  -fcond-mismatch -flax-vector-conversions
476          -fsigned-bitfields  -fsigned-char
477          -funsigned-bitfields  -funsigned-char
478
479_C++ Language Options_
480     *Note Options Controlling C++ Dialect: C++ Dialect Options.
481          -fabi-version=N  -fno-access-control  -fcheck-new
482          -fconstexpr-depth=N  -ffriend-injection
483          -fno-elide-constructors
484          -fno-enforce-eh-specs
485          -ffor-scope  -fno-for-scope  -fno-gnu-keywords
486          -fno-implicit-templates
487          -fno-implicit-inline-templates
488          -fno-implement-inlines  -fms-extensions
489          -fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names
490          -fno-optional-diags  -fpermissive
491          -fno-pretty-templates
492          -frepo  -fno-rtti  -fstats  -ftemplate-backtrace-limit=N
493          -ftemplate-depth=N
494          -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++
495          -fno-default-inline  -fvisibility-inlines-hidden
496          -fvisibility-ms-compat
497          -fext-numeric-literals
498          -Wabi  -Wconversion-null  -Wctor-dtor-privacy
499          -Wdelete-non-virtual-dtor -Wliteral-suffix -Wnarrowing
500          -Wnoexcept -Wnon-virtual-dtor  -Wreorder
501          -Weffc++  -Wstrict-null-sentinel
502          -Wno-non-template-friend  -Wold-style-cast
503          -Woverloaded-virtual  -Wno-pmf-conversions
504          -Wsign-promo
505
506_Objective-C and Objective-C++ Language Options_
507     *Note Options Controlling Objective-C and Objective-C++ Dialects:
508     Objective-C and Objective-C++ Dialect Options.
509          -fconstant-string-class=CLASS-NAME
510          -fgnu-runtime  -fnext-runtime
511          -fno-nil-receivers
512          -fobjc-abi-version=N
513          -fobjc-call-cxx-cdtors
514          -fobjc-direct-dispatch
515          -fobjc-exceptions
516          -fobjc-gc
517          -fobjc-nilcheck
518          -fobjc-std=objc1
519          -freplace-objc-classes
520          -fzero-link
521          -gen-decls
522          -Wassign-intercept
523          -Wno-protocol  -Wselector
524          -Wstrict-selector-match
525          -Wundeclared-selector
526
527_Language Independent Options_
528     *Note Options to Control Diagnostic Messages Formatting: Language
529     Independent Options.
530          -fmessage-length=N
531          -fdiagnostics-show-location=[once|every-line]
532          -fno-diagnostics-show-option -fno-diagnostics-show-caret
533
534_Warning Options_
535     *Note Options to Request or Suppress Warnings: Warning Options.
536          -fsyntax-only  -fmax-errors=N  -Wpedantic
537          -pedantic-errors
538          -w  -Wextra  -Wall  -Waddress  -Waggregate-return
539          -Waggressive-loop-optimizations -Warray-bounds
540          -Wno-attributes -Wno-builtin-macro-redefined
541          -Wc++-compat -Wc++11-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 -Wno-free-nonheap-object -Wjump-misses-init
551          -Wignored-qualifiers
552          -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int
553          -Winit-self  -Winline -Wmaybe-uninitialized
554          -Wno-int-to-pointer-cast -Wno-invalid-offsetof
555          -Winvalid-pch -Wlarger-than=LEN  -Wunsafe-loop-optimizations
556          -Wlogical-op -Wlong-long
557          -Wmain -Wmaybe-uninitialized -Wmissing-braces  -Wmissing-field-initializers
558          -Wmissing-include-dirs
559          -Wno-mudflap
560          -Wno-multichar  -Wnonnull  -Wno-overflow
561          -Woverlength-strings  -Wpacked  -Wpacked-bitfield-compat  -Wpadded
562          -Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format
563          -Wpointer-arith  -Wno-pointer-to-int-cast
564          -Wredundant-decls  -Wno-return-local-addr
565          -Wreturn-type  -Wsequence-point  -Wshadow
566          -Wsign-compare  -Wsign-conversion  -Wsizeof-pointer-memaccess
567          -Wstack-protector -Wstack-usage=LEN -Wstrict-aliasing
568          -Wstrict-aliasing=n  -Wstrict-overflow -Wstrict-overflow=N
569          -Wsuggest-attribute=[pure|const|noreturn|format]
570          -Wmissing-format-attribute
571          -Wswitch  -Wswitch-default  -Wswitch-enum -Wsync-nand
572          -Wsystem-headers  -Wtrampolines  -Wtrigraphs  -Wtype-limits  -Wundef
573          -Wuninitialized  -Wunknown-pragmas  -Wno-pragmas
574          -Wunsuffixed-float-constants  -Wunused  -Wunused-function
575          -Wunused-label  -Wunused-local-typedefs -Wunused-parameter
576          -Wno-unused-result -Wunused-value  -Wunused-variable
577          -Wunused-but-set-parameter -Wunused-but-set-variable
578          -Wuseless-cast -Wvariadic-macros -Wvector-operation-performance
579          -Wvla -Wvolatile-register-var  -Wwrite-strings -Wzero-as-null-pointer-constant
580
581_C and Objective-C-only Warning Options_
582          -Wbad-function-cast  -Wmissing-declarations
583          -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
584          -Wold-style-declaration  -Wold-style-definition
585          -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion
586          -Wdeclaration-after-statement -Wpointer-sign
587
588_Debugging Options_
589     *Note Options for Debugging Your Program or GCC: Debugging Options.
590          -dLETTERS  -dumpspecs  -dumpmachine  -dumpversion
591          -fsanitize=STYLE
592          -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST
593          -fdisable-ipa-PASS_NAME
594          -fdisable-rtl-PASS_NAME
595          -fdisable-rtl-PASS-NAME=RANGE-LIST
596          -fdisable-tree-PASS_NAME
597          -fdisable-tree-PASS-NAME=RANGE-LIST
598          -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links
599          -fdump-translation-unit[-N]
600          -fdump-class-hierarchy[-N]
601          -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline
602          -fdump-passes
603          -fdump-statistics
604          -fdump-tree-all
605          -fdump-tree-original[-N]
606          -fdump-tree-optimized[-N]
607          -fdump-tree-cfg -fdump-tree-alias
608          -fdump-tree-ch
609          -fdump-tree-ssa[-N] -fdump-tree-pre[-N]
610          -fdump-tree-ccp[-N] -fdump-tree-dce[-N]
611          -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-N]
612          -fdump-tree-dom[-N]
613          -fdump-tree-dse[-N]
614          -fdump-tree-phiprop[-N]
615          -fdump-tree-phiopt[-N]
616          -fdump-tree-forwprop[-N]
617          -fdump-tree-copyrename[-N]
618          -fdump-tree-nrv -fdump-tree-vect
619          -fdump-tree-sink
620          -fdump-tree-sra[-N]
621          -fdump-tree-forwprop[-N]
622          -fdump-tree-fre[-N]
623          -fdump-tree-vrp[-N]
624          -ftree-vectorizer-verbose=N
625          -fdump-tree-storeccp[-N]
626          -fdump-final-insns=FILE
627          -fcompare-debug[=OPTS]  -fcompare-debug-second
628          -feliminate-dwarf2-dups -fno-eliminate-unused-debug-types
629          -feliminate-unused-debug-symbols -femit-class-debug-always
630          -fenable-KIND-PASS
631          -fenable-KIND-PASS=RANGE-LIST
632          -fdebug-types-section -fmem-report-wpa
633          -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs
634          -fopt-info
635          -fopt-info-OPTIONS[=FILE]
636          -frandom-seed=STRING -fsched-verbose=N
637          -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose
638          -fstack-usage  -ftest-coverage  -ftime-report -fvar-tracking
639          -fvar-tracking-assignments  -fvar-tracking-assignments-toggle
640          -g  -gLEVEL  -gtoggle  -gcoff  -gdwarf-VERSION
641          -ggdb  -grecord-gcc-switches  -gno-record-gcc-switches
642          -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf
643          -gvms  -gxcoff  -gxcoff+
644          -fno-merge-debug-strings -fno-dwarf2-cfi-asm
645          -fdebug-prefix-map=OLD=NEW
646          -femit-struct-debug-baseonly -femit-struct-debug-reduced
647          -femit-struct-debug-detailed[=SPEC-LIST]
648          -p  -pg  -print-file-name=LIBRARY  -print-libgcc-file-name
649          -print-multi-directory  -print-multi-lib  -print-multi-os-directory
650          -print-prog-name=PROGRAM  -print-search-dirs  -Q
651          -print-sysroot -print-sysroot-headers-suffix
652          -save-temps -save-temps=cwd -save-temps=obj -time[=FILE]
653
654_Optimization Options_
655     *Note Options that Control Optimization: Optimize Options.
656          -faggressive-loop-optimizations -falign-functions[=N]
657          -falign-jumps[=N]
658          -falign-labels[=N] -falign-loops[=N]
659          -fassociative-math -fauto-inc-dec -fbranch-probabilities
660          -fbranch-target-load-optimize -fbranch-target-load-optimize2
661          -fbtr-bb-exclusive -fcaller-saves
662          -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack
663          -fcompare-elim -fcprop-registers -fcrossjumping
664          -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules
665          -fcx-limited-range
666          -fdata-sections -fdce -fdelayed-branch
667          -fdelete-null-pointer-checks -fdevirtualize -fdse
668          -fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects
669          -ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=STYLE
670          -fforward-propagate -ffp-contract=STYLE -ffunction-sections
671          -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity
672          -fgcse-sm -fhoist-adjacent-loads -fif-conversion
673          -fif-conversion2 -findirect-inlining
674          -finline-functions -finline-functions-called-once -finline-limit=N
675          -finline-small-functions -fipa-cp -fipa-cp-clone
676          -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference
677          -fira-algorithm=ALGORITHM
678          -fira-region=REGION -fira-hoist-pressure
679          -fira-loop-pressure -fno-ira-share-save-slots
680          -fno-ira-share-spill-slots -fira-verbose=N
681          -fivopts -fkeep-inline-functions -fkeep-static-consts
682          -floop-block -floop-interchange -floop-strip-mine -floop-nest-optimize
683          -floop-parallelize-all -flto -flto-compression-level
684          -flto-partition=ALG -flto-report -fmerge-all-constants
685          -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves
686          -fmove-loop-invariants fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg
687          -fno-default-inline
688          -fno-defer-pop -fno-function-cse -fno-guess-branch-probability
689          -fno-inline -fno-math-errno -fno-peephole -fno-peephole2
690          -fno-sched-interblock -fno-sched-spec -fno-signed-zeros
691          -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss
692          -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls
693          -fpartial-inlining -fpeel-loops -fpredictive-commoning
694          -fprefetch-loop-arrays -fprofile-report
695          -fprofile-correction -fprofile-dir=PATH -fprofile-generate
696          -fprofile-generate=PATH
697          -fprofile-use -fprofile-use=PATH -fprofile-values
698          -freciprocal-math -free -fregmove -frename-registers -freorder-blocks
699          -freorder-blocks-and-partition -freorder-functions
700          -frerun-cse-after-loop -freschedule-modulo-scheduled-loops
701          -frounding-math -fsched2-use-superblocks -fsched-pressure
702          -fsched-spec-load -fsched-spec-load-dangerous
703          -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N]
704          -fsched-group-heuristic -fsched-critical-path-heuristic
705          -fsched-spec-insn-heuristic -fsched-rank-heuristic
706          -fsched-last-insn-heuristic -fsched-dep-count-heuristic
707          -fschedule-insns -fschedule-insns2 -fsection-anchors
708          -fselective-scheduling -fselective-scheduling2
709          -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops
710          -fshrink-wrap -fsignaling-nans -fsingle-precision-constant
711          -fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector
712          -fstack-protector-all -fstrict-aliasing -fstrict-overflow
713          -fthread-jumps -ftracer -ftree-bit-ccp
714          -ftree-builtin-call-dce -ftree-ccp -ftree-ch
715          -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop
716          -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse
717          -ftree-forwprop -ftree-fre -ftree-loop-if-convert
718          -ftree-loop-if-convert-stores -ftree-loop-im
719          -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns
720          -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize
721          -ftree-parallelize-loops=N -ftree-pre -ftree-partial-pre -ftree-pta
722          -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra
723          -ftree-switch-conversion -ftree-tail-merge
724          -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp
725          -funit-at-a-time -funroll-all-loops -funroll-loops
726          -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops
727          -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb
728          -fwhole-program -fwpa -fuse-ld=LINKER -fuse-linker-plugin
729          --param NAME=VALUE
730          -O  -O0  -O1  -O2  -O3  -Os -Ofast -Og
731
732_Preprocessor Options_
733     *Note Options Controlling the Preprocessor: Preprocessor Options.
734          -AQUESTION=ANSWER
735          -A-QUESTION[=ANSWER]
736          -C  -dD  -dI  -dM  -dN
737          -DMACRO[=DEFN]  -E  -H
738          -idirafter DIR
739          -include FILE  -imacros FILE
740          -iprefix FILE  -iwithprefix DIR
741          -iwithprefixbefore DIR  -isystem DIR
742          -imultilib DIR -isysroot DIR
743          -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc
744          -P  -fdebug-cpp -ftrack-macro-expansion -fworking-directory
745          -remap -trigraphs  -undef  -UMACRO
746          -Wp,OPTION -Xpreprocessor OPTION -no-integrated-cpp
747
748_Assembler Option_
749     *Note Passing Options to the Assembler: Assembler Options.
750          -Wa,OPTION  -Xassembler OPTION
751
752_Linker Options_
753     *Note Options for Linking: Link Options.
754          OBJECT-FILE-NAME  -lLIBRARY
755          -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic
756          -s  -static -static-libgcc -static-libstdc++
757          -static-libasan -static-libtsan
758          -shared -shared-libgcc  -symbolic
759          -T SCRIPT  -Wl,OPTION  -Xlinker OPTION
760          -u SYMBOL
761
762_Directory Options_
763     *Note Options for Directory Search: Directory Options.
764          -BPREFIX -IDIR -iplugindir=DIR
765          -iquoteDIR -LDIR -specs=FILE -I-
766          --sysroot=DIR --no-sysroot-suffix
767
768_Machine Dependent Options_
769     *Note Hardware Models and Configurations: Submodel Options.
770
771     _AArch64 Options_
772          -mbig-endian  -mlittle-endian
773          -mgeneral-regs-only
774          -mcmodel=tiny  -mcmodel=small  -mcmodel=large
775          -mstrict-align
776          -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
777          -mtls-dialect=desc  -mtls-dialect=traditional
778          -mfix-cortex-a53-835769  -mno-fix-cortex-a53-835769
779          -march=NAME  -mcpu=NAME  -mtune=NAME
780
781     _Adapteva Epiphany Options_
782          -mhalf-reg-file -mprefer-short-insn-regs
783          -mbranch-cost=NUM -mcmove -mnops=NUM -msoft-cmpsf
784          -msplit-lohi -mpost-inc -mpost-modify -mstack-offset=NUM
785          -mround-nearest -mlong-calls -mshort-calls -msmall16
786          -mfp-mode=MODE -mvect-double -max-vect-align=NUM
787          -msplit-vecmove-early -m1reg-REG
788
789     _ARM Options_
790          -mapcs-frame  -mno-apcs-frame
791          -mabi=NAME
792          -mapcs-stack-check  -mno-apcs-stack-check
793          -mapcs-float  -mno-apcs-float
794          -mapcs-reentrant  -mno-apcs-reentrant
795          -msched-prolog  -mno-sched-prolog
796          -mlittle-endian  -mbig-endian  -mwords-little-endian
797          -mfloat-abi=NAME
798          -mfp16-format=NAME
799          -mthumb-interwork  -mno-thumb-interwork
800          -mcpu=NAME  -march=NAME  -mfpu=NAME
801          -mstructure-size-boundary=N
802          -mabort-on-noreturn
803          -mlong-calls  -mno-long-calls
804          -msingle-pic-base  -mno-single-pic-base
805          -mpic-register=REG
806          -mnop-fun-dllimport
807          -mpoke-function-name
808          -mthumb  -marm
809          -mtpcs-frame  -mtpcs-leaf-frame
810          -mcaller-super-interworking  -mcallee-super-interworking
811          -mtp=NAME -mtls-dialect=DIALECT
812          -mword-relocations
813          -mfix-cortex-m3-ldrd
814          -munaligned-access
815
816     _AVR Options_
817          -mmcu=MCU -maccumulate-args -mbranch-cost=COST
818          -mcall-prologues -mint8 -mno-interrupts -mrelax
819          -mstrict-X -mtiny-stack -Waddr-space-convert
820
821     _Blackfin Options_
822          -mcpu=CPU[-SIREVISION]
823          -msim -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
824          -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly
825          -mlow-64k -mno-low64k  -mstack-check-l1  -mid-shared-library
826          -mno-id-shared-library  -mshared-library-id=N
827          -mleaf-id-shared-library  -mno-leaf-id-shared-library
828          -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls
829          -mfast-fp -minline-plt -mmulticore  -mcorea  -mcoreb  -msdram
830          -micplb
831
832     _C6X Options_
833          -mbig-endian  -mlittle-endian -march=CPU
834          -msim -msdata=SDATA-TYPE
835
836     _CRIS Options_
837          -mcpu=CPU  -march=CPU  -mtune=CPU
838          -mmax-stack-frame=N  -melinux-stacksize=N
839          -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects
840          -mstack-align  -mdata-align  -mconst-align
841          -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
842          -melf  -maout  -melinux  -mlinux  -sim  -sim2
843          -mmul-bug-workaround  -mno-mul-bug-workaround
844
845     _CR16 Options_
846          -mmac
847          -mcr16cplus -mcr16c
848          -msim -mint32 -mbit-ops
849          -mdata-model=MODEL
850
851     _Darwin Options_
852          -all_load  -allowable_client  -arch  -arch_errors_fatal
853          -arch_only  -bind_at_load  -bundle  -bundle_loader
854          -client_name  -compatibility_version  -current_version
855          -dead_strip
856          -dependency-file  -dylib_file  -dylinker_install_name
857          -dynamic  -dynamiclib  -exported_symbols_list
858          -filelist  -flat_namespace  -force_cpusubtype_ALL
859          -force_flat_namespace  -headerpad_max_install_names
860          -iframework
861          -image_base  -init  -install_name  -keep_private_externs
862          -multi_module  -multiply_defined  -multiply_defined_unused
863          -noall_load   -no_dead_strip_inits_and_terms
864          -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit
865          -pagezero_size  -prebind  -prebind_all_twolevel_modules
866          -private_bundle  -read_only_relocs  -sectalign
867          -sectobjectsymbols  -whyload  -seg1addr
868          -sectcreate  -sectobjectsymbols  -sectorder
869          -segaddr -segs_read_only_addr -segs_read_write_addr
870          -seg_addr_table  -seg_addr_table_filename  -seglinkedit
871          -segprot  -segs_read_only_addr  -segs_read_write_addr
872          -single_module  -static  -sub_library  -sub_umbrella
873          -twolevel_namespace  -umbrella  -undefined
874          -unexported_symbols_list  -weak_reference_mismatches
875          -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION
876          -mkernel -mone-byte-bool
877
878     _DEC Alpha Options_
879          -mno-fp-regs  -msoft-float
880          -mieee  -mieee-with-inexact  -mieee-conformant
881          -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE
882          -mtrap-precision=MODE  -mbuild-constants
883          -mcpu=CPU-TYPE  -mtune=CPU-TYPE
884          -mbwx  -mmax  -mfix  -mcix
885          -mfloat-vax  -mfloat-ieee
886          -mexplicit-relocs  -msmall-data  -mlarge-data
887          -msmall-text  -mlarge-text
888          -mmemory-latency=TIME
889
890     _FR30 Options_
891          -msmall-model -mno-lsim
892
893     _FRV Options_
894          -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64
895          -mhard-float  -msoft-float
896          -malloc-cc  -mfixed-cc  -mdword  -mno-dword
897          -mdouble  -mno-double
898          -mmedia  -mno-media  -mmuladd  -mno-muladd
899          -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic
900          -mlinked-fp  -mlong-calls  -malign-labels
901          -mlibrary-pic  -macc-4  -macc-8
902          -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
903          -moptimize-membar -mno-optimize-membar
904          -mscc  -mno-scc  -mcond-exec  -mno-cond-exec
905          -mvliw-branch  -mno-vliw-branch
906          -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
907          -mno-nested-cond-exec  -mtomcat-stats
908          -mTLS -mtls
909          -mcpu=CPU
910
911     _GNU/Linux Options_
912          -mglibc -muclibc -mbionic -mandroid
913          -tno-android-cc -tno-android-ld
914
915     _H8/300 Options_
916          -mrelax  -mh  -ms  -mn  -mexr -mno-exr  -mint32  -malign-300
917
918     _HPPA Options_
919          -march=ARCHITECTURE-TYPE
920          -mbig-switch  -mdisable-fpregs  -mdisable-indexing
921          -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
922          -mfixed-range=REGISTER-RANGE
923          -mjump-in-delay -mlinker-opt -mlong-calls
924          -mlong-load-store  -mno-big-switch  -mno-disable-fpregs
925          -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
926          -mno-jump-in-delay  -mno-long-load-store
927          -mno-portable-runtime  -mno-soft-float
928          -mno-space-regs  -msoft-float  -mpa-risc-1-0
929          -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
930          -mschedule=CPU-TYPE  -mspace-regs  -msio  -mwsio
931          -munix=UNIX-STD  -nolibdld  -static  -threads
932
933     _i386 and x86-64 Options_
934          -mtune=CPU-TYPE  -march=CPU-TYPE
935          -mfpmath=UNIT
936          -masm=DIALECT  -mno-fancy-math-387
937          -mno-fp-ret-in-387  -msoft-float
938          -mno-wide-multiply  -mrtd  -malign-double
939          -mpreferred-stack-boundary=NUM
940          -mincoming-stack-boundary=NUM
941          -mcld -mcx16 -msahf -mmovbe -mcrc32
942          -mrecip -mrecip=OPT
943          -mvzeroupper -mprefer-avx128
944          -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx
945          -mavx2 -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma
946          -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt
947          -mbmi2 -mrtm -mlwp -mthreads
948          -mno-align-stringops  -minline-all-stringops
949          -minline-stringops-dynamically -mstringop-strategy=ALG
950          -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
951          -m96bit-long-double -mlong-double-64 -mlong-double-80
952          -mregparm=NUM  -msseregparm
953          -mveclibabi=TYPE -mvect8-ret-in-mem
954          -mpc32 -mpc64 -mpc80 -mstackrealign
955          -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs
956          -mcmodel=CODE-MODEL -mabi=NAME -maddress-mode=MODE
957          -m32 -m64 -mx32 -mlarge-data-threshold=NUM
958          -msse2avx -mfentry -m8bit-idiv
959          -mavx256-split-unaligned-load -mavx256-split-unaligned-store
960
961     _i386 and x86-64 Windows Options_
962          -mconsole -mcygwin -mno-cygwin -mdll
963          -mnop-fun-dllimport -mthread
964          -municode -mwin32 -mwindows -fno-set-stack-executable
965
966     _IA-64 Options_
967          -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
968          -mvolatile-asm-stop  -mregister-names  -msdata -mno-sdata
969          -mconstant-gp  -mauto-pic  -mfused-madd
970          -minline-float-divide-min-latency
971          -minline-float-divide-max-throughput
972          -mno-inline-float-divide
973          -minline-int-divide-min-latency
974          -minline-int-divide-max-throughput
975          -mno-inline-int-divide
976          -minline-sqrt-min-latency -minline-sqrt-max-throughput
977          -mno-inline-sqrt
978          -mdwarf2-asm -mearly-stop-bits
979          -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE
980          -mtune=CPU-TYPE -milp32 -mlp64
981          -msched-br-data-spec -msched-ar-data-spec -msched-control-spec
982          -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec
983          -msched-spec-ldc -msched-spec-control-ldc
984          -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns
985          -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path
986          -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost
987          -msched-max-memory-insns-hard-limit -msched-max-memory-insns=MAX-INSNS
988
989     _LM32 Options_
990          -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled
991          -msign-extend-enabled -muser-enabled
992
993     _M32R/D Options_
994          -m32r2 -m32rx -m32r
995          -mdebug
996          -malign-loops -mno-align-loops
997          -missue-rate=NUMBER
998          -mbranch-cost=NUMBER
999          -mmodel=CODE-SIZE-MODEL-TYPE
1000          -msdata=SDATA-TYPE
1001          -mno-flush-func -mflush-func=NAME
1002          -mno-flush-trap -mflush-trap=NUMBER
1003          -G NUM
1004
1005     _M32C Options_
1006          -mcpu=CPU -msim -memregs=NUMBER
1007
1008     _M680x0 Options_
1009          -march=ARCH  -mcpu=CPU  -mtune=TUNE
1010          -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
1011          -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407
1012          -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020
1013          -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort
1014          -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
1015          -malign-int  -mstrict-align  -msep-data  -mno-sep-data
1016          -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
1017          -mxgot -mno-xgot
1018
1019     _MCore Options_
1020          -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates
1021          -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields
1022          -m4byte-functions  -mno-4byte-functions  -mcallgraph-data
1023          -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim
1024          -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment
1025
1026     _MeP Options_
1027          -mabsdiff -mall-opts -maverage -mbased=N -mbitops
1028          -mc=N -mclip -mconfig=NAME -mcop -mcop32 -mcop64 -mivc2
1029          -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax
1030          -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf
1031          -mtiny=N
1032
1033     _MicroBlaze Options_
1034          -msoft-float -mhard-float -msmall-divides -mcpu=CPU
1035          -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift
1036          -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss
1037          -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt
1038          -mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-APP-MODEL
1039
1040     _MIPS Options_
1041          -EL  -EB  -march=ARCH  -mtune=ARCH
1042          -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2
1043          -mips64  -mips64r2
1044          -mips16  -mno-mips16  -mflip-mips16
1045          -minterlink-mips16  -mno-interlink-mips16
1046          -mabi=ABI  -mabicalls  -mno-abicalls
1047          -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot
1048          -mgp32  -mgp64  -mfp32  -mfp64  -mhard-float  -msoft-float
1049          -mno-float -msingle-float  -mdouble-float
1050          -mdsp  -mno-dsp  -mdspr2  -mno-dspr2
1051          -mmcu -mmno-mcu
1052          -mfpu=FPU-TYPE
1053          -msmartmips  -mno-smartmips
1054          -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx
1055          -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc
1056          -mlong64  -mlong32  -msym32  -mno-sym32
1057          -GNUM  -mlocal-sdata  -mno-local-sdata
1058          -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt
1059          -membedded-data  -mno-embedded-data
1060          -muninit-const-in-rodata  -mno-uninit-const-in-rodata
1061          -mcode-readable=SETTING
1062          -msplit-addresses  -mno-split-addresses
1063          -mexplicit-relocs  -mno-explicit-relocs
1064          -mcheck-zero-division  -mno-check-zero-division
1065          -mdivide-traps  -mdivide-breaks
1066          -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls
1067          -mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp
1068          -mfix-24k -mno-fix-24k
1069          -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
1070          -mfix-r10000 -mno-fix-r10000  -mfix-vr4120  -mno-fix-vr4120
1071          -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1
1072          -mflush-func=FUNC  -mno-flush-func
1073          -mbranch-cost=NUM  -mbranch-likely  -mno-branch-likely
1074          -mfp-exceptions -mno-fp-exceptions
1075          -mvr4130-align -mno-vr4130-align -msynci -mno-synci
1076          -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address
1077
1078     _MMIX Options_
1079          -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu
1080          -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols
1081          -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses
1082          -mno-base-addresses  -msingle-exit  -mno-single-exit
1083
1084     _MN10300 Options_
1085          -mmult-bug  -mno-mult-bug
1086          -mno-am33 -mam33 -mam33-2 -mam34
1087          -mtune=CPU-TYPE
1088          -mreturn-pointer-on-d0
1089          -mno-crt0  -mrelax -mliw -msetlb
1090
1091     _Moxie Options_
1092          -meb -mel -mno-crt0
1093
1094     _PDP-11 Options_
1095          -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10
1096          -mbcopy  -mbcopy-builtin  -mint32  -mno-int16
1097          -mint16  -mno-int32  -mfloat32  -mno-float64
1098          -mfloat64  -mno-float32  -mabshi  -mno-abshi
1099          -mbranch-expensive  -mbranch-cheap
1100          -munix-asm  -mdec-asm
1101
1102     _picoChip Options_
1103          -mae=AE_TYPE -mvliw-lookahead=N
1104          -msymbol-as-address -mno-inefficient-warnings
1105
1106     _PowerPC Options_ See RS/6000 and PowerPC Options.
1107
1108     _RL78 Options_
1109          -msim -mmul=none -mmul=g13 -mmul=rl78
1110
1111     _RS/6000 and PowerPC Options_
1112          -mcpu=CPU-TYPE
1113          -mtune=CPU-TYPE
1114          -mcmodel=CODE-MODEL
1115          -mpowerpc64
1116          -maltivec  -mno-altivec
1117          -mpowerpc-gpopt  -mno-powerpc-gpopt
1118          -mpowerpc-gfxopt  -mno-powerpc-gfxopt
1119          -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb -mpopcntd -mno-popcntd
1120          -mfprnd  -mno-fprnd
1121          -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp
1122          -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc
1123          -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe
1124          -malign-power  -malign-natural
1125          -msoft-float  -mhard-float  -mmultiple  -mno-multiple
1126          -msingle-float -mdouble-float -msimple-fpu
1127          -mstring  -mno-string  -mupdate  -mno-update
1128          -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
1129          -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
1130          -mstrict-align  -mno-strict-align  -mrelocatable
1131          -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
1132          -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
1133          -mdynamic-no-pic  -maltivec -mswdiv  -msingle-pic-base
1134          -mprioritize-restricted-insns=PRIORITY
1135          -msched-costly-dep=DEPENDENCE_TYPE
1136          -minsert-sched-nops=SCHEME
1137          -mcall-sysv  -mcall-netbsd
1138          -maix-struct-return  -msvr4-struct-return
1139          -mabi=ABI-TYPE -msecure-plt -mbss-plt
1140          -mblock-move-inline-limit=NUM
1141          -misel -mno-isel
1142          -misel=yes  -misel=no
1143          -mspe -mno-spe
1144          -mspe=yes  -mspe=no
1145          -mpaired
1146          -mgen-cell-microcode -mwarn-cell-microcode
1147          -mvrsave -mno-vrsave
1148          -mmulhw -mno-mulhw
1149          -mdlmzb -mno-dlmzb
1150          -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double
1151          -mprototype  -mno-prototype
1152          -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
1153          -msdata=OPT  -mvxworks  -G NUM  -pthread
1154          -mrecip -mrecip=OPT -mno-recip -mrecip-precision
1155          -mno-recip-precision
1156          -mveclibabi=TYPE -mfriz -mno-friz
1157          -mpointers-to-nested-functions -mno-pointers-to-nested-functions
1158          -msave-toc-indirect -mno-save-toc-indirect
1159          -mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector
1160          -mcrypto -mno-crypto -mdirect-move -mno-direct-move
1161          -mquad-memory -mno-quad-memory
1162          -mquad-memory-atomic -mno-quad-memory-atomic
1163          -mcompat-align-parm -mno-compat-align-parm
1164
1165     _RX Options_
1166          -m64bit-doubles  -m32bit-doubles  -fpu  -nofpu
1167          -mcpu=
1168          -mbig-endian-data -mlittle-endian-data
1169          -msmall-data
1170          -msim  -mno-sim
1171          -mas100-syntax -mno-as100-syntax
1172          -mrelax
1173          -mmax-constant-size=
1174          -mint-register=
1175          -mpid
1176          -mno-warn-multiple-fast-interrupts
1177          -msave-acc-in-interrupts
1178
1179     _S/390 and zSeries Options_
1180          -mtune=CPU-TYPE  -march=CPU-TYPE
1181          -mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp
1182          -mlong-double-64 -mlong-double-128
1183          -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack
1184          -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle
1185          -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
1186          -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd
1187          -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard
1188          -mhotpatch=HALFWORDS,HALFWORDS
1189
1190     _Score Options_
1191          -meb -mel
1192          -mnhwloop
1193          -muls
1194          -mmac
1195          -mscore5 -mscore5u -mscore7 -mscore7d
1196
1197     _SH Options_
1198          -m1  -m2  -m2e
1199          -m2a-nofpu -m2a-single-only -m2a-single -m2a
1200          -m3  -m3e
1201          -m4-nofpu  -m4-single-only  -m4-single  -m4
1202          -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al
1203          -m5-64media  -m5-64media-nofpu
1204          -m5-32media  -m5-32media-nofpu
1205          -m5-compact  -m5-compact-nofpu
1206          -mb  -ml  -mdalign  -mrelax
1207          -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave
1208          -mieee -mno-ieee -mbitops  -misize  -minline-ic_invalidate -mpadstruct
1209          -mspace -mprefergot  -musermode -multcost=NUMBER -mdiv=STRATEGY
1210          -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE
1211          -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed
1212          -maccumulate-outgoing-args -minvalid-symbols
1213          -matomic-model=ATOMIC-MODEL
1214          -mbranch-cost=NUM -mzdcbranch -mno-zdcbranch -mcbranchdi -mcmpeqdi
1215          -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra
1216          -mpretend-cmove -mtas
1217
1218     _Solaris 2 Options_
1219          -mimpure-text  -mno-impure-text
1220          -pthreads -pthread
1221
1222     _SPARC Options_
1223          -mcpu=CPU-TYPE
1224          -mtune=CPU-TYPE
1225          -mcmodel=CODE-MODEL
1226          -mmemory-model=MEM-MODEL
1227          -m32  -m64  -mapp-regs  -mno-app-regs
1228          -mfaster-structs  -mno-faster-structs  -mflat  -mno-flat
1229          -mfpu  -mno-fpu  -mhard-float  -msoft-float
1230          -mhard-quad-float  -msoft-quad-float
1231          -mstack-bias  -mno-stack-bias
1232          -munaligned-doubles  -mno-unaligned-doubles
1233          -muser-mode  -mno-user-mode
1234          -mv8plus  -mno-v8plus  -mvis  -mno-vis
1235          -mvis2  -mno-vis2  -mvis3  -mno-vis3
1236          -mcbcond -mno-cbcond
1237          -mfmaf  -mno-fmaf  -mpopc  -mno-popc
1238          -mfix-at697f -mfix-ut699
1239
1240     _SPU Options_
1241          -mwarn-reloc -merror-reloc
1242          -msafe-dma -munsafe-dma
1243          -mbranch-hints
1244          -msmall-mem -mlarge-mem -mstdmain
1245          -mfixed-range=REGISTER-RANGE
1246          -mea32 -mea64
1247          -maddress-space-conversion -mno-address-space-conversion
1248          -mcache-size=CACHE-SIZE
1249          -matomic-updates -mno-atomic-updates
1250
1251     _System V Options_
1252          -Qy  -Qn  -YP,PATHS  -Ym,DIR
1253
1254     _TILE-Gx Options_
1255          -mcpu=CPU -m32 -m64 -mcmodel=CODE-MODEL
1256
1257     _TILEPro Options_
1258          -mcpu=CPU -m32
1259
1260     _V850 Options_
1261          -mlong-calls  -mno-long-calls  -mep  -mno-ep
1262          -mprolog-function  -mno-prolog-function  -mspace
1263          -mtda=N  -msda=N  -mzda=N
1264          -mapp-regs  -mno-app-regs
1265          -mdisable-callt  -mno-disable-callt
1266          -mv850e2v3 -mv850e2 -mv850e1 -mv850es
1267          -mv850e -mv850 -mv850e3v5
1268          -mloop
1269          -mrelax
1270          -mlong-jumps
1271          -msoft-float
1272          -mhard-float
1273          -mgcc-abi
1274          -mrh850-abi
1275          -mbig-switch
1276
1277     _VAX Options_
1278          -mg  -mgnu  -munix
1279
1280     _VMS Options_
1281          -mvms-return-codes -mdebug-main=PREFIX -mmalloc64
1282          -mpointer-size=SIZE
1283
1284     _VxWorks Options_
1285          -mrtp  -non-static  -Bstatic  -Bdynamic
1286          -Xbind-lazy  -Xbind-now
1287
1288     _x86-64 Options_ See i386 and x86-64 Options.
1289
1290     _Xstormy16 Options_
1291          -msim
1292
1293     _Xtensa Options_
1294          -mconst16 -mno-const16
1295          -mfused-madd  -mno-fused-madd
1296          -mforce-no-pic
1297          -mserialize-volatile  -mno-serialize-volatile
1298          -mtext-section-literals  -mno-text-section-literals
1299          -mtarget-align  -mno-target-align
1300          -mlongcalls  -mno-longcalls
1301
1302     _zSeries Options_ See S/390 and zSeries Options.
1303
1304_Code Generation Options_
1305     *Note Options for Code Generation Conventions: Code Gen Options.
1306          -fcall-saved-REG  -fcall-used-REG
1307          -ffixed-REG  -fexceptions
1308          -fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables
1309          -fasynchronous-unwind-tables
1310          -fno-gnu-unique
1311          -finhibit-size-directive  -finstrument-functions
1312          -finstrument-functions-exclude-function-list=SYM,SYM,...
1313          -finstrument-functions-exclude-file-list=FILE,FILE,...
1314          -fno-common  -fno-ident
1315          -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE
1316          -fno-jump-tables
1317          -frecord-gcc-switches
1318          -freg-struct-return  -fshort-enums
1319          -fshort-double  -fshort-wchar
1320          -fverbose-asm  -fpack-struct[=N]  -fstack-check
1321          -fstack-limit-register=REG  -fstack-limit-symbol=SYM
1322          -fno-stack-limit -fsplit-stack
1323          -fleading-underscore  -ftls-model=MODEL
1324          -fstack-reuse=REUSE_LEVEL
1325          -ftrapv  -fwrapv  -fbounds-check
1326          -fvisibility -fstrict-volatile-bitfields -fsync-libcalls
1327
1328
1329* Menu:
1330
1331* Overall Options::     Controlling the kind of output:
1332                        an executable, object files, assembler files,
1333                        or preprocessed source.
1334* C Dialect Options::   Controlling the variant of C language compiled.
1335* C++ Dialect Options:: Variations on C++.
1336* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
1337                        and Objective-C++.
1338* Language Independent Options:: Controlling how diagnostics should be
1339                        formatted.
1340* Warning Options::     How picky should the compiler be?
1341* Debugging Options::   Symbol tables, measurements, and debugging dumps.
1342* Optimize Options::    How much optimization?
1343* Preprocessor Options:: Controlling header files and macro definitions.
1344                         Also, getting dependency information for Make.
1345* Assembler Options::   Passing options to the assembler.
1346* Link Options::        Specifying libraries and so on.
1347* Directory Options::   Where to find header files and libraries.
1348                        Where to find the compiler executable files.
1349* Spec Files::          How to pass switches to sub-processes.
1350* Target Options::      Running a cross-compiler, or an old version of GCC.
1351
1352
1353File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC
1354
13553.2 Options Controlling the Kind of Output
1356==========================================
1357
1358Compilation can involve up to four stages: preprocessing, compilation
1359proper, assembly and linking, always in that order.  GCC is capable of
1360preprocessing and compiling several files either into several assembler
1361input files, or into one assembler input file; then each assembler
1362input file produces an object file, and linking combines all the object
1363files (those newly compiled, and those specified as input) into an
1364executable file.
1365
1366 For any given input file, the file name suffix determines what kind of
1367compilation is done:
1368
1369`FILE.c'
1370     C source code that must be preprocessed.
1371
1372`FILE.i'
1373     C source code that should not be preprocessed.
1374
1375`FILE.ii'
1376     C++ source code that should not be preprocessed.
1377
1378`FILE.m'
1379     Objective-C source code.  Note that you must link with the
1380     `libobjc' library to make an Objective-C program work.
1381
1382`FILE.mi'
1383     Objective-C source code that should not be preprocessed.
1384
1385`FILE.mm'
1386`FILE.M'
1387     Objective-C++ source code.  Note that you must link with the
1388     `libobjc' library to make an Objective-C++ program work.  Note
1389     that `.M' refers to a literal capital M.
1390
1391`FILE.mii'
1392     Objective-C++ source code that should not be preprocessed.
1393
1394`FILE.h'
1395     C, C++, Objective-C or Objective-C++ header file to be turned into
1396     a precompiled header (default), or C, C++ header file to be turned
1397     into an Ada spec (via the `-fdump-ada-spec' switch).
1398
1399`FILE.cc'
1400`FILE.cp'
1401`FILE.cxx'
1402`FILE.cpp'
1403`FILE.CPP'
1404`FILE.c++'
1405`FILE.C'
1406     C++ source code that must be preprocessed.  Note that in `.cxx',
1407     the last two letters must both be literally `x'.  Likewise, `.C'
1408     refers to a literal capital C.
1409
1410`FILE.mm'
1411`FILE.M'
1412     Objective-C++ source code that must be preprocessed.
1413
1414`FILE.mii'
1415     Objective-C++ source code that should not be preprocessed.
1416
1417`FILE.hh'
1418`FILE.H'
1419`FILE.hp'
1420`FILE.hxx'
1421`FILE.hpp'
1422`FILE.HPP'
1423`FILE.h++'
1424`FILE.tcc'
1425     C++ header file to be turned into a precompiled header or Ada spec.
1426
1427`FILE.f'
1428`FILE.for'
1429`FILE.ftn'
1430     Fixed form Fortran source code that should not be preprocessed.
1431
1432`FILE.F'
1433`FILE.FOR'
1434`FILE.fpp'
1435`FILE.FPP'
1436`FILE.FTN'
1437     Fixed form Fortran source code that must be preprocessed (with the
1438     traditional preprocessor).
1439
1440`FILE.f90'
1441`FILE.f95'
1442`FILE.f03'
1443`FILE.f08'
1444     Free form Fortran source code that should not be preprocessed.
1445
1446`FILE.F90'
1447`FILE.F95'
1448`FILE.F03'
1449`FILE.F08'
1450     Free form Fortran source code that must be preprocessed (with the
1451     traditional preprocessor).
1452
1453`FILE.go'
1454     Go source code.
1455
1456`FILE.ads'
1457     Ada source code file that contains a library unit declaration (a
1458     declaration of a package, subprogram, or generic, or a generic
1459     instantiation), or a library unit renaming declaration (a package,
1460     generic, or subprogram renaming declaration).  Such files are also
1461     called "specs".
1462
1463`FILE.adb'
1464     Ada source code file containing a library unit body (a subprogram
1465     or package body).  Such files are also called "bodies".
1466
1467`FILE.s'
1468     Assembler code.
1469
1470`FILE.S'
1471`FILE.sx'
1472     Assembler code that must be preprocessed.
1473
1474`OTHER'
1475     An object file to be fed straight into linking.  Any file name
1476     with no recognized suffix is treated this way.
1477
1478 You can specify the input language explicitly with the `-x' option:
1479
1480`-x LANGUAGE'
1481     Specify explicitly the LANGUAGE for the following input files
1482     (rather than letting the compiler choose a default based on the
1483     file name suffix).  This option applies to all following input
1484     files until the next `-x' option.  Possible values for LANGUAGE
1485     are:
1486          c  c-header  cpp-output
1487          c++  c++-header  c++-cpp-output
1488          objective-c  objective-c-header  objective-c-cpp-output
1489          objective-c++ objective-c++-header objective-c++-cpp-output
1490          assembler  assembler-with-cpp
1491          ada
1492          f77  f77-cpp-input f95  f95-cpp-input
1493          go
1494          java
1495
1496`-x none'
1497     Turn off any specification of a language, so that subsequent files
1498     are handled according to their file name suffixes (as they are if
1499     `-x' has not been used at all).
1500
1501`-pass-exit-codes'
1502     Normally the `gcc' program exits with the code of 1 if any phase
1503     of the compiler returns a non-success return code.  If you specify
1504     `-pass-exit-codes', the `gcc' program instead returns with the
1505     numerically highest error produced by any phase returning an error
1506     indication.  The C, C++, and Fortran front ends return 4 if an
1507     internal compiler error is encountered.
1508
1509 If you only want some of the stages of compilation, you can use `-x'
1510(or filename suffixes) to tell `gcc' where to start, and one of the
1511options `-c', `-S', or `-E' to say where `gcc' is to stop.  Note that
1512some combinations (for example, `-x cpp-output -E') instruct `gcc' to
1513do nothing at all.
1514
1515`-c'
1516     Compile or assemble the source files, but do not link.  The linking
1517     stage simply is not done.  The ultimate output is in the form of an
1518     object file for each source file.
1519
1520     By default, the object file name for a source file is made by
1521     replacing the suffix `.c', `.i', `.s', etc., with `.o'.
1522
1523     Unrecognized input files, not requiring compilation or assembly,
1524     are ignored.
1525
1526`-S'
1527     Stop after the stage of compilation proper; do not assemble.  The
1528     output is in the form of an assembler code file for each
1529     non-assembler input file specified.
1530
1531     By default, the assembler file name for a source file is made by
1532     replacing the suffix `.c', `.i', etc., with `.s'.
1533
1534     Input files that don't require compilation are ignored.
1535
1536`-E'
1537     Stop after the preprocessing stage; do not run the compiler
1538     proper.  The output is in the form of preprocessed source code,
1539     which is sent to the standard output.
1540
1541     Input files that don't require preprocessing are ignored.
1542
1543`-o FILE'
1544     Place output in file FILE.  This applies to whatever sort of
1545     output is being produced, whether it be an executable file, an
1546     object file, an assembler file or preprocessed C code.
1547
1548     If `-o' is not specified, the default is to put an executable file
1549     in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its
1550     assembler file in `SOURCE.s', a precompiled header file in
1551     `SOURCE.SUFFIX.gch', and all preprocessed C source on standard
1552     output.
1553
1554`-v'
1555     Print (on standard error output) the commands executed to run the
1556     stages of compilation.  Also print the version number of the
1557     compiler driver program and of the preprocessor and the compiler
1558     proper.
1559
1560`-###'
1561     Like `-v' except the commands are not executed and arguments are
1562     quoted unless they contain only alphanumeric characters or `./-_'.
1563     This is useful for shell scripts to capture the driver-generated
1564     command lines.
1565
1566`-pipe'
1567     Use pipes rather than temporary files for communication between the
1568     various stages of compilation.  This fails to work on some systems
1569     where the assembler is unable to read from a pipe; but the GNU
1570     assembler has no trouble.
1571
1572`--help'
1573     Print (on the standard output) a description of the command-line
1574     options understood by `gcc'.  If the `-v' option is also specified
1575     then `--help' is also passed on to the various processes invoked
1576     by `gcc', so that they can display the command-line options they
1577     accept.  If the `-Wextra' option has also been specified (prior to
1578     the `--help' option), then command-line options that have no
1579     documentation associated with them are also displayed.
1580
1581`--target-help'
1582     Print (on the standard output) a description of target-specific
1583     command-line options for each tool.  For some targets extra
1584     target-specific information may also be printed.
1585
1586`--help={CLASS|[^]QUALIFIER}[,...]'
1587     Print (on the standard output) a description of the command-line
1588     options understood by the compiler that fit into all specified
1589     classes and qualifiers.  These are the supported classes:
1590
1591    `optimizers'
1592          Display all of the optimization options supported by the
1593          compiler.
1594
1595    `warnings'
1596          Display all of the options controlling warning messages
1597          produced by the compiler.
1598
1599    `target'
1600          Display target-specific options.  Unlike the `--target-help'
1601          option however, target-specific options of the linker and
1602          assembler are not displayed.  This is because those tools do
1603          not currently support the extended `--help=' syntax.
1604
1605    `params'
1606          Display the values recognized by the `--param' option.
1607
1608    LANGUAGE
1609          Display the options supported for LANGUAGE, where LANGUAGE is
1610          the name of one of the languages supported in this version of
1611          GCC.
1612
1613    `common'
1614          Display the options that are common to all languages.
1615
1616     These are the supported qualifiers:
1617
1618    `undocumented'
1619          Display only those options that are undocumented.
1620
1621    `joined'
1622          Display options taking an argument that appears after an equal
1623          sign in the same continuous piece of text, such as:
1624          `--help=target'.
1625
1626    `separate'
1627          Display options taking an argument that appears as a separate
1628          word following the original option, such as: `-o output-file'.
1629
1630     Thus for example to display all the undocumented target-specific
1631     switches supported by the compiler, use:
1632
1633          --help=target,undocumented
1634
1635     The sense of a qualifier can be inverted by prefixing it with the
1636     `^' character, so for example to display all binary warning
1637     options (i.e., ones that are either on or off and that do not take
1638     an argument) that have a description, use:
1639
1640          --help=warnings,^joined,^undocumented
1641
1642     The argument to `--help=' should not consist solely of inverted
1643     qualifiers.
1644
1645     Combining several classes is possible, although this usually
1646     restricts the output so much that there is nothing to display.  One
1647     case where it does work, however, is when one of the classes is
1648     TARGET.  For example, to display all the target-specific
1649     optimization options, use:
1650
1651          --help=target,optimizers
1652
1653     The `--help=' option can be repeated on the command line.  Each
1654     successive use displays its requested class of options, skipping
1655     those that have already been displayed.
1656
1657     If the `-Q' option appears on the command line before the
1658     `--help=' option, then the descriptive text displayed by `--help='
1659     is changed.  Instead of describing the displayed options, an
1660     indication is given as to whether the option is enabled, disabled
1661     or set to a specific value (assuming that the compiler knows this
1662     at the point where the `--help=' option is used).
1663
1664     Here is a truncated example from the ARM port of `gcc':
1665
1666            % gcc -Q -mabi=2 --help=target -c
1667            The following options are target specific:
1668            -mabi=                                2
1669            -mabort-on-noreturn                   [disabled]
1670            -mapcs                                [disabled]
1671
1672     The output is sensitive to the effects of previous command-line
1673     options, so for example it is possible to find out which
1674     optimizations are enabled at `-O2' by using:
1675
1676          -Q -O2 --help=optimizers
1677
1678     Alternatively you can discover which binary optimizations are
1679     enabled by `-O3' by using:
1680
1681          gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1682          gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1683          diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1684
1685`-no-canonical-prefixes'
1686     Do not expand any symbolic links, resolve references to `/../' or
1687     `/./', or make the path absolute when generating a relative prefix.
1688
1689`--version'
1690     Display the version number and copyrights of the invoked GCC.
1691
1692`-wrapper'
1693     Invoke all subcommands under a wrapper program.  The name of the
1694     wrapper program and its parameters are passed as a comma separated
1695     list.
1696
1697          gcc -c t.c -wrapper gdb,--args
1698
1699     This invokes all subprograms of `gcc' under `gdb --args', thus the
1700     invocation of `cc1' is `gdb --args cc1 ...'.
1701
1702`-fplugin=NAME.so'
1703     Load the plugin code in file NAME.so, assumed to be a shared
1704     object to be dlopen'd by the compiler.  The base name of the
1705     shared object file is used to identify the plugin for the purposes
1706     of argument parsing (See `-fplugin-arg-NAME-KEY=VALUE' below).
1707     Each plugin should define the callback functions specified in the
1708     Plugins API.
1709
1710`-fplugin-arg-NAME-KEY=VALUE'
1711     Define an argument called KEY with a value of VALUE for the plugin
1712     called NAME.
1713
1714`-fdump-ada-spec[-slim]'
1715     For C and C++ source and include files, generate corresponding Ada
1716     specs.  *Note Generating Ada Bindings for C and C++ headers:
1717     (gnat_ugn)Generating Ada Bindings for C and C++ headers, which
1718     provides detailed documentation on this feature.
1719
1720`-fada-spec-parent=UNIT'
1721     In conjunction with `-fdump-ada-spec[-slim]' above, generate Ada
1722     specs as child units of parent UNIT.
1723
1724`-fdump-go-spec=FILE'
1725     For input files in any language, generate corresponding Go
1726     declarations in FILE.  This generates Go `const', `type', `var',
1727     and `func' declarations which may be a useful way to start writing
1728     a Go interface to code written in some other language.
1729
1730`@FILE'
1731     Read command-line options from FILE.  The options read are
1732     inserted in place of the original @FILE option.  If FILE does not
1733     exist, or cannot be read, then the option will be treated
1734     literally, and not removed.
1735
1736     Options in FILE are separated by whitespace.  A whitespace
1737     character may be included in an option by surrounding the entire
1738     option in either single or double quotes.  Any character
1739     (including a backslash) may be included by prefixing the character
1740     to be included with a backslash.  The FILE may itself contain
1741     additional @FILE options; any such options will be processed
1742     recursively.
1743
1744
1745File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC
1746
17473.3 Compiling C++ Programs
1748==========================
1749
1750C++ source files conventionally use one of the suffixes `.C', `.cc',
1751`.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use
1752`.hh', `.hpp', `.H', or (for shared template code) `.tcc'; and
1753preprocessed C++ files use the suffix `.ii'.  GCC recognizes files with
1754these names and compiles them as C++ programs even if you call the
1755compiler the same way as for compiling C programs (usually with the
1756name `gcc').
1757
1758 However, the use of `gcc' does not add the C++ library.  `g++' is a
1759program that calls GCC and automatically specifies linking against the
1760C++ library.  It treats `.c', `.h' and `.i' files as C++ source files
1761instead of C source files unless `-x' is used.  This program is also
1762useful when precompiling a C header file with a `.h' extension for use
1763in C++ compilations.  On many systems, `g++' is also installed with the
1764name `c++'.
1765
1766 When you compile C++ programs, you may specify many of the same
1767command-line options that you use for compiling programs in any
1768language; or command-line options meaningful for C and related
1769languages; or options that are meaningful only for C++ programs.  *Note
1770Options Controlling C Dialect: C Dialect Options, for explanations of
1771options for languages related to C.  *Note Options Controlling C++
1772Dialect: C++ Dialect Options, for explanations of options that are
1773meaningful only for C++ programs.
1774
1775
1776File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC
1777
17783.4 Options Controlling C Dialect
1779=================================
1780
1781The following options control the dialect of C (or languages derived
1782from C, such as C++, Objective-C and Objective-C++) that the compiler
1783accepts:
1784
1785`-ansi'
1786     In C mode, this is equivalent to `-std=c90'. In C++ mode, it is
1787     equivalent to `-std=c++98'.
1788
1789     This turns off certain features of GCC that are incompatible with
1790     ISO C90 (when compiling C code), or of standard C++ (when
1791     compiling C++ code), such as the `asm' and `typeof' keywords, and
1792     predefined macros such as `unix' and `vax' that identify the type
1793     of system you are using.  It also enables the undesirable and
1794     rarely used ISO trigraph feature.  For the C compiler, it disables
1795     recognition of C++ style `//' comments as well as the `inline'
1796     keyword.
1797
1798     The alternate keywords `__asm__', `__extension__', `__inline__'
1799     and `__typeof__' continue to work despite `-ansi'.  You would not
1800     want to use them in an ISO C program, of course, but it is useful
1801     to put them in header files that might be included in compilations
1802     done with `-ansi'.  Alternate predefined macros such as `__unix__'
1803     and `__vax__' are also available, with or without `-ansi'.
1804
1805     The `-ansi' option does not cause non-ISO programs to be rejected
1806     gratuitously.  For that, `-Wpedantic' is required in addition to
1807     `-ansi'.  *Note Warning Options::.
1808
1809     The macro `__STRICT_ANSI__' is predefined when the `-ansi' option
1810     is used.  Some header files may notice this macro and refrain from
1811     declaring certain functions or defining certain macros that the
1812     ISO standard doesn't call for; this is to avoid interfering with
1813     any programs that might use these names for other things.
1814
1815     Functions that are normally built in but do not have semantics
1816     defined by ISO C (such as `alloca' and `ffs') are not built-in
1817     functions when `-ansi' is used.  *Note Other built-in functions
1818     provided by GCC: Other Builtins, for details of the functions
1819     affected.
1820
1821`-std='
1822     Determine the language standard. *Note Language Standards
1823     Supported by GCC: Standards, for details of these standard
1824     versions.  This option is currently only supported when compiling
1825     C or C++.
1826
1827     The compiler can accept several base standards, such as `c90' or
1828     `c++98', and GNU dialects of those standards, such as `gnu90' or
1829     `gnu++98'.  When a base standard is specified, the compiler
1830     accepts all programs following that standard plus those using GNU
1831     extensions that do not contradict it.  For example, `-std=c90'
1832     turns off certain features of GCC that are incompatible with ISO
1833     C90, such as the `asm' and `typeof' keywords, but not other GNU
1834     extensions that do not have a meaning in ISO C90, such as omitting
1835     the middle term of a `?:' expression. On the other hand, when a
1836     GNU dialect of a standard is specified, all features supported by
1837     the compiler are enabled, even when those features change the
1838     meaning of the base standard.  As a result, some strict-conforming
1839     programs may be rejected.  The particular standard is used by
1840     `-Wpedantic' to identify which features are GNU extensions given
1841     that version of the standard. For example `-std=gnu90 -Wpedantic'
1842     warns about C++ style `//' comments, while `-std=gnu99 -Wpedantic'
1843     does not.
1844
1845     A value for this option must be provided; possible values are
1846
1847    `c90'
1848    `c89'
1849    `iso9899:1990'
1850          Support all ISO C90 programs (certain GNU extensions that
1851          conflict with ISO C90 are disabled). Same as `-ansi' for C
1852          code.
1853
1854    `iso9899:199409'
1855          ISO C90 as modified in amendment 1.
1856
1857    `c99'
1858    `c9x'
1859    `iso9899:1999'
1860    `iso9899:199x'
1861          ISO C99.  Note that this standard is not yet fully supported;
1862          see `http://gcc.gnu.org/c99status.html' for more information.
1863          The names `c9x' and `iso9899:199x' are deprecated.
1864
1865    `c11'
1866    `c1x'
1867    `iso9899:2011'
1868          ISO C11, the 2011 revision of the ISO C standard.  Support is
1869          incomplete and experimental.  The name `c1x' is deprecated.
1870
1871    `gnu90'
1872    `gnu89'
1873          GNU dialect of ISO C90 (including some C99 features). This is
1874          the default for C code.
1875
1876    `gnu99'
1877    `gnu9x'
1878          GNU dialect of ISO C99.  When ISO C99 is fully implemented in
1879          GCC, this will become the default.  The name `gnu9x' is
1880          deprecated.
1881
1882    `gnu11'
1883    `gnu1x'
1884          GNU dialect of ISO C11.  Support is incomplete and
1885          experimental.  The name `gnu1x' is deprecated.
1886
1887    `c++98'
1888    `c++03'
1889          The 1998 ISO C++ standard plus the 2003 technical corrigendum
1890          and some additional defect reports. Same as `-ansi' for C++
1891          code.
1892
1893    `gnu++98'
1894    `gnu++03'
1895          GNU dialect of `-std=c++98'.  This is the default for C++
1896          code.
1897
1898    `c++11'
1899    `c++0x'
1900          The 2011 ISO C++ standard plus amendments.  Support for C++11
1901          is still experimental, and may change in incompatible ways in
1902          future releases.  The name `c++0x' is deprecated.
1903
1904    `gnu++11'
1905    `gnu++0x'
1906          GNU dialect of `-std=c++11'. Support for C++11 is still
1907          experimental, and may change in incompatible ways in future
1908          releases.  The name `gnu++0x' is deprecated.
1909
1910    `c++1y'
1911          The next revision of the ISO C++ standard, tentatively
1912          planned for 2017.  Support is highly experimental, and will
1913          almost certainly change in incompatible ways in future
1914          releases.
1915
1916    `gnu++1y'
1917          GNU dialect of `-std=c++1y'.  Support is highly experimental,
1918          and will almost certainly change in incompatible ways in
1919          future releases.
1920
1921`-fgnu89-inline'
1922     The option `-fgnu89-inline' tells GCC to use the traditional GNU
1923     semantics for `inline' functions when in C99 mode.  *Note An
1924     Inline Function is As Fast As a Macro: Inline.  This option is
1925     accepted and ignored by GCC versions 4.1.3 up to but not including
1926     4.3.  In GCC versions 4.3 and later it changes the behavior of GCC
1927     in C99 mode.  Using this option is roughly equivalent to adding the
1928     `gnu_inline' function attribute to all inline functions (*note
1929     Function Attributes::).
1930
1931     The option `-fno-gnu89-inline' explicitly tells GCC to use the C99
1932     semantics for `inline' when in C99 or gnu99 mode (i.e., it
1933     specifies the default behavior).  This option was first supported
1934     in GCC 4.3.  This option is not supported in `-std=c90' or
1935     `-std=gnu90' mode.
1936
1937     The preprocessor macros `__GNUC_GNU_INLINE__' and
1938     `__GNUC_STDC_INLINE__' may be used to check which semantics are in
1939     effect for `inline' functions.  *Note Common Predefined Macros:
1940     (cpp)Common Predefined Macros.
1941
1942`-aux-info FILENAME'
1943     Output to the given filename prototyped declarations for all
1944     functions declared and/or defined in a translation unit, including
1945     those in header files.  This option is silently ignored in any
1946     language other than C.
1947
1948     Besides declarations, the file indicates, in comments, the origin
1949     of each declaration (source file and line), whether the
1950     declaration was implicit, prototyped or unprototyped (`I', `N' for
1951     new or `O' for old, respectively, in the first character after the
1952     line number and the colon), and whether it came from a declaration
1953     or a definition (`C' or `F', respectively, in the following
1954     character).  In the case of function definitions, a K&R-style list
1955     of arguments followed by their declarations is also provided,
1956     inside comments, after the declaration.
1957
1958`-fallow-parameterless-variadic-functions'
1959     Accept variadic functions without named parameters.
1960
1961     Although it is possible to define such a function, this is not very
1962     useful as it is not possible to read the arguments.  This is only
1963     supported for C as this construct is allowed by C++.
1964
1965`-fno-asm'
1966     Do not recognize `asm', `inline' or `typeof' as a keyword, so that
1967     code can use these words as identifiers.  You can use the keywords
1968     `__asm__', `__inline__' and `__typeof__' instead.  `-ansi' implies
1969     `-fno-asm'.
1970
1971     In C++, this switch only affects the `typeof' keyword, since `asm'
1972     and `inline' are standard keywords.  You may want to use the
1973     `-fno-gnu-keywords' flag instead, which has the same effect.  In
1974     C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects
1975     the `asm' and `typeof' keywords, since `inline' is a standard
1976     keyword in ISO C99.
1977
1978`-fno-builtin'
1979`-fno-builtin-FUNCTION'
1980     Don't recognize built-in functions that do not begin with
1981     `__builtin_' as prefix.  *Note Other built-in functions provided
1982     by GCC: Other Builtins, for details of the functions affected,
1983     including those which are not built-in functions when `-ansi' or
1984     `-std' options for strict ISO C conformance are used because they
1985     do not have an ISO standard meaning.
1986
1987     GCC normally generates special code to handle certain built-in
1988     functions more efficiently; for instance, calls to `alloca' may
1989     become single instructions which adjust the stack directly, and
1990     calls to `memcpy' may become inline copy loops.  The resulting
1991     code is often both smaller and faster, but since the function
1992     calls no longer appear as such, you cannot set a breakpoint on
1993     those calls, nor can you change the behavior of the functions by
1994     linking with a different library.  In addition, when a function is
1995     recognized as a built-in function, GCC may use information about
1996     that function to warn about problems with calls to that function,
1997     or to generate more efficient code, even if the resulting code
1998     still contains calls to that function.  For example, warnings are
1999     given with `-Wformat' for bad calls to `printf' when `printf' is
2000     built in and `strlen' is known not to modify global memory.
2001
2002     With the `-fno-builtin-FUNCTION' option only the built-in function
2003     FUNCTION is disabled.  FUNCTION must not begin with `__builtin_'.
2004     If a function is named that is not built-in in this version of
2005     GCC, this option is ignored.  There is no corresponding
2006     `-fbuiltin-FUNCTION' option; if you wish to enable built-in
2007     functions selectively when using `-fno-builtin' or
2008     `-ffreestanding', you may define macros such as:
2009
2010          #define abs(n)          __builtin_abs ((n))
2011          #define strcpy(d, s)    __builtin_strcpy ((d), (s))
2012
2013`-fhosted'
2014     Assert that compilation targets a hosted environment.  This implies
2015     `-fbuiltin'.  A hosted environment is one in which the entire
2016     standard library is available, and in which `main' has a return
2017     type of `int'.  Examples are nearly everything except a kernel.
2018     This is equivalent to `-fno-freestanding'.
2019
2020`-ffreestanding'
2021     Assert that compilation targets a freestanding environment.  This
2022     implies `-fno-builtin'.  A freestanding environment is one in
2023     which the standard library may not exist, and program startup may
2024     not necessarily be at `main'.  The most obvious example is an OS
2025     kernel.  This is equivalent to `-fno-hosted'.
2026
2027     *Note Language Standards Supported by GCC: Standards, for details
2028     of freestanding and hosted environments.
2029
2030`-fopenmp'
2031     Enable handling of OpenMP directives `#pragma omp' in C/C++ and
2032     `!$omp' in Fortran.  When `-fopenmp' is specified, the compiler
2033     generates parallel code according to the OpenMP Application
2034     Program Interface v3.0 `http://www.openmp.org/'.  This option
2035     implies `-pthread', and thus is only supported on targets that
2036     have support for `-pthread'.
2037
2038`-fgnu-tm'
2039     When the option `-fgnu-tm' is specified, the compiler generates
2040     code for the Linux variant of Intel's current Transactional Memory
2041     ABI specification document (Revision 1.1, May 6 2009).  This is an
2042     experimental feature whose interface may change in future versions
2043     of GCC, as the official specification changes.  Please note that
2044     not all architectures are supported for this feature.
2045
2046     For more information on GCC's support for transactional memory,
2047     *Note The GNU Transactional Memory Library: (libitm)Enabling
2048     libitm.
2049
2050     Note that the transactional memory feature is not supported with
2051     non-call exceptions (`-fnon-call-exceptions').
2052
2053`-fms-extensions'
2054     Accept some non-standard constructs used in Microsoft header files.
2055
2056     In C++ code, this allows member names in structures to be similar
2057     to previous types declarations.
2058
2059          typedef int UOW;
2060          struct ABC {
2061            UOW UOW;
2062          };
2063
2064     Some cases of unnamed fields in structures and unions are only
2065     accepted with this option.  *Note Unnamed struct/union fields
2066     within structs/unions: Unnamed Fields, for details.
2067
2068`-fplan9-extensions'
2069     Accept some non-standard constructs used in Plan 9 code.
2070
2071     This enables `-fms-extensions', permits passing pointers to
2072     structures with anonymous fields to functions that expect pointers
2073     to elements of the type of the field, and permits referring to
2074     anonymous fields declared using a typedef.  *Note Unnamed
2075     struct/union fields within structs/unions: Unnamed Fields, for
2076     details.  This is only supported for C, not C++.
2077
2078`-trigraphs'
2079     Support ISO C trigraphs.  The `-ansi' option (and `-std' options
2080     for strict ISO C conformance) implies `-trigraphs'.
2081
2082`-traditional'
2083`-traditional-cpp'
2084     Formerly, these options caused GCC to attempt to emulate a
2085     pre-standard C compiler.  They are now only supported with the
2086     `-E' switch.  The preprocessor continues to support a pre-standard
2087     mode.  See the GNU CPP manual for details.
2088
2089`-fcond-mismatch'
2090     Allow conditional expressions with mismatched types in the second
2091     and third arguments.  The value of such an expression is void.
2092     This option is not supported for C++.
2093
2094`-flax-vector-conversions'
2095     Allow implicit conversions between vectors with differing numbers
2096     of elements and/or incompatible element types.  This option should
2097     not be used for new code.
2098
2099`-funsigned-char'
2100     Let the type `char' be unsigned, like `unsigned char'.
2101
2102     Each kind of machine has a default for what `char' should be.  It
2103     is either like `unsigned char' by default or like `signed char' by
2104     default.
2105
2106     Ideally, a portable program should always use `signed char' or
2107     `unsigned char' when it depends on the signedness of an object.
2108     But many programs have been written to use plain `char' and expect
2109     it to be signed, or expect it to be unsigned, depending on the
2110     machines they were written for.  This option, and its inverse, let
2111     you make such a program work with the opposite default.
2112
2113     The type `char' is always a distinct type from each of `signed
2114     char' or `unsigned char', even though its behavior is always just
2115     like one of those two.
2116
2117`-fsigned-char'
2118     Let the type `char' be signed, like `signed char'.
2119
2120     Note that this is equivalent to `-fno-unsigned-char', which is the
2121     negative form of `-funsigned-char'.  Likewise, the option
2122     `-fno-signed-char' is equivalent to `-funsigned-char'.
2123
2124`-fsigned-bitfields'
2125`-funsigned-bitfields'
2126`-fno-signed-bitfields'
2127`-fno-unsigned-bitfields'
2128     These options control whether a bit-field is signed or unsigned,
2129     when the declaration does not use either `signed' or `unsigned'.
2130     By default, such a bit-field is signed, because this is
2131     consistent: the basic integer types such as `int' are signed types.
2132
2133
2134File: gcc.info,  Node: C++ Dialect Options,  Next: Objective-C and Objective-C++ Dialect Options,  Prev: C Dialect Options,  Up: Invoking GCC
2135
21363.5 Options Controlling C++ Dialect
2137===================================
2138
2139This section describes the command-line options that are only meaningful
2140for C++ programs.  You can also use most of the GNU compiler options
2141regardless of what language your program is in.  For example, you might
2142compile a file `firstClass.C' like this:
2143
2144     g++ -g -frepo -O -c firstClass.C
2145
2146In this example, only `-frepo' is an option meant only for C++
2147programs; you can use the other options with any language supported by
2148GCC.
2149
2150 Here is a list of options that are _only_ for compiling C++ programs:
2151
2152`-fabi-version=N'
2153     Use version N of the C++ ABI.  The default is version 2.
2154
2155     Version 0 refers to the version conforming most closely to the C++
2156     ABI specification.  Therefore, the ABI obtained using version 0
2157     will change in different versions of G++ as ABI bugs are fixed.
2158
2159     Version 1 is the version of the C++ ABI that first appeared in G++
2160     3.2.
2161
2162     Version 2 is the version of the C++ ABI that first appeared in G++
2163     3.4.
2164
2165     Version 3 corrects an error in mangling a constant address as a
2166     template argument.
2167
2168     Version 4, which first appeared in G++ 4.5, implements a standard
2169     mangling for vector types.
2170
2171     Version 5, which first appeared in G++ 4.6, corrects the mangling
2172     of attribute const/volatile on function pointer types, decltype of
2173     a plain decl, and use of a function parameter in the declaration of
2174     another parameter.
2175
2176     Version 6, which first appeared in G++ 4.7, corrects the promotion
2177     behavior of C++11 scoped enums and the mangling of template
2178     argument packs, const/static_cast, prefix ++ and -, and a class
2179     scope function used as a template argument.
2180
2181     See also `-Wabi'.
2182
2183`-fno-access-control'
2184     Turn off all access checking.  This switch is mainly useful for
2185     working around bugs in the access control code.
2186
2187`-fcheck-new'
2188     Check that the pointer returned by `operator new' is non-null
2189     before attempting to modify the storage allocated.  This check is
2190     normally unnecessary because the C++ standard specifies that
2191     `operator new' only returns `0' if it is declared `throw()', in
2192     which case the compiler always checks the return value even
2193     without this option.  In all other cases, when `operator new' has
2194     a non-empty exception specification, memory exhaustion is
2195     signalled by throwing `std::bad_alloc'.  See also `new (nothrow)'.
2196
2197`-fconstexpr-depth=N'
2198     Set the maximum nested evaluation depth for C++11 constexpr
2199     functions to N.  A limit is needed to detect endless recursion
2200     during constant expression evaluation.  The minimum specified by
2201     the standard is 512.
2202
2203`-fdeduce-init-list'
2204     Enable deduction of a template type parameter as
2205     `std::initializer_list' from a brace-enclosed initializer list,
2206     i.e.
2207
2208          template <class T> auto forward(T t) -> decltype (realfn (t))
2209          {
2210            return realfn (t);
2211          }
2212
2213          void f()
2214          {
2215            forward({1,2}); // call forward<std::initializer_list<int>>
2216          }
2217
2218     This deduction was implemented as a possible extension to the
2219     originally proposed semantics for the C++11 standard, but was not
2220     part of the final standard, so it is disabled by default.  This
2221     option is deprecated, and may be removed in a future version of
2222     G++.
2223
2224`-ffriend-injection'
2225     Inject friend functions into the enclosing namespace, so that they
2226     are visible outside the scope of the class in which they are
2227     declared.  Friend functions were documented to work this way in
2228     the old Annotated C++ Reference Manual, and versions of G++ before
2229     4.1 always worked that way.  However, in ISO C++ a friend function
2230     that is not declared in an enclosing scope can only be found using
2231     argument dependent lookup.  This option causes friends to be
2232     injected as they were in earlier releases.
2233
2234     This option is for compatibility, and may be removed in a future
2235     release of G++.
2236
2237`-fno-elide-constructors'
2238     The C++ standard allows an implementation to omit creating a
2239     temporary that is only used to initialize another object of the
2240     same type.  Specifying this option disables that optimization, and
2241     forces G++ to call the copy constructor in all cases.
2242
2243`-fno-enforce-eh-specs'
2244     Don't generate code to check for violation of exception
2245     specifications at run time.  This option violates the C++
2246     standard, but may be useful for reducing code size in production
2247     builds, much like defining `NDEBUG'.  This does not give user code
2248     permission to throw exceptions in violation of the exception
2249     specifications; the compiler still optimizes based on the
2250     specifications, so throwing an unexpected exception results in
2251     undefined behavior at run time.
2252
2253`-fextern-tls-init'
2254`-fno-extern-tls-init'
2255     The C++11 and OpenMP standards allow `thread_local' and
2256     `threadprivate' variables to have dynamic (runtime)
2257     initialization.  To support this, any use of such a variable goes
2258     through a wrapper function that performs any necessary
2259     initialization.  When the use and definition of the variable are
2260     in the same translation unit, this overhead can be optimized away,
2261     but when the use is in a different translation unit there is
2262     significant overhead even if the variable doesn't actually need
2263     dynamic initialization.  If the programmer can be sure that no use
2264     of the variable in a non-defining TU needs to trigger dynamic
2265     initialization (either because the variable is statically
2266     initialized, or a use of the variable in the defining TU will be
2267     executed before any uses in another TU), they can avoid this
2268     overhead with the `-fno-extern-tls-init' option.
2269
2270     On targets that support symbol aliases, the default is
2271     `-fextern-tls-init'.  On targets that do not support symbol
2272     aliases, the default is `-fno-extern-tls-init'.
2273
2274`-ffor-scope'
2275`-fno-for-scope'
2276     If `-ffor-scope' is specified, the scope of variables declared in
2277     a for-init-statement is limited to the `for' loop itself, as
2278     specified by the C++ standard.  If `-fno-for-scope' is specified,
2279     the scope of variables declared in a for-init-statement extends to
2280     the end of the enclosing scope, as was the case in old versions of
2281     G++, and other (traditional) implementations of C++.
2282
2283     If neither flag is given, the default is to follow the standard,
2284     but to allow and give a warning for old-style code that would
2285     otherwise be invalid, or have different behavior.
2286
2287`-fno-gnu-keywords'
2288     Do not recognize `typeof' as a keyword, so that code can use this
2289     word as an identifier.  You can use the keyword `__typeof__'
2290     instead.  `-ansi' implies `-fno-gnu-keywords'.
2291
2292`-fno-implicit-templates'
2293     Never emit code for non-inline templates that are instantiated
2294     implicitly (i.e. by use); only emit code for explicit
2295     instantiations.  *Note Template Instantiation::, for more
2296     information.
2297
2298`-fno-implicit-inline-templates'
2299     Don't emit code for implicit instantiations of inline templates,
2300     either.  The default is to handle inlines differently so that
2301     compiles with and without optimization need the same set of
2302     explicit instantiations.
2303
2304`-fno-implement-inlines'
2305     To save space, do not emit out-of-line copies of inline functions
2306     controlled by `#pragma implementation'.  This causes linker errors
2307     if these functions are not inlined everywhere they are called.
2308
2309`-fms-extensions'
2310     Disable Wpedantic warnings about constructs used in MFC, such as
2311     implicit int and getting a pointer to member function via
2312     non-standard syntax.
2313
2314`-fno-nonansi-builtins'
2315     Disable built-in declarations of functions that are not mandated by
2316     ANSI/ISO C.  These include `ffs', `alloca', `_exit', `index',
2317     `bzero', `conjf', and other related functions.
2318
2319`-fnothrow-opt'
2320     Treat a `throw()' exception specification as if it were a
2321     `noexcept' specification to reduce or eliminate the text size
2322     overhead relative to a function with no exception specification.
2323     If the function has local variables of types with non-trivial
2324     destructors, the exception specification actually makes the
2325     function smaller because the EH cleanups for those variables can be
2326     optimized away.  The semantic effect is that an exception thrown
2327     out of a function with such an exception specification results in
2328     a call to `terminate' rather than `unexpected'.
2329
2330`-fno-operator-names'
2331     Do not treat the operator name keywords `and', `bitand', `bitor',
2332     `compl', `not', `or' and `xor' as synonyms as keywords.
2333
2334`-fno-optional-diags'
2335     Disable diagnostics that the standard says a compiler does not
2336     need to issue.  Currently, the only such diagnostic issued by G++
2337     is the one for a name having multiple meanings within a class.
2338
2339`-fpermissive'
2340     Downgrade some diagnostics about nonconformant code from errors to
2341     warnings.  Thus, using `-fpermissive' allows some nonconforming
2342     code to compile.
2343
2344`-fno-pretty-templates'
2345     When an error message refers to a specialization of a function
2346     template, the compiler normally prints the signature of the
2347     template followed by the template arguments and any typedefs or
2348     typenames in the signature (e.g. `void f(T) [with T = int]' rather
2349     than `void f(int)') so that it's clear which template is involved.
2350     When an error message refers to a specialization of a class
2351     template, the compiler omits any template arguments that match the
2352     default template arguments for that template.  If either of these
2353     behaviors make it harder to understand the error message rather
2354     than easier, you can use `-fno-pretty-templates' to disable them.
2355
2356`-frepo'
2357     Enable automatic template instantiation at link time.  This option
2358     also implies `-fno-implicit-templates'.  *Note Template
2359     Instantiation::, for more information.
2360
2361`-fno-rtti'
2362     Disable generation of information about every class with virtual
2363     functions for use by the C++ run-time type identification features
2364     (`dynamic_cast' and `typeid').  If you don't use those parts of
2365     the language, you can save some space by using this flag.  Note
2366     that exception handling uses the same information, but G++
2367     generates it as needed. The `dynamic_cast' operator can still be
2368     used for casts that do not require run-time type information, i.e.
2369     casts to `void *' or to unambiguous base classes.
2370
2371`-fstats'
2372     Emit statistics about front-end processing at the end of the
2373     compilation.  This information is generally only useful to the G++
2374     development team.
2375
2376`-fstrict-enums'
2377     Allow the compiler to optimize using the assumption that a value of
2378     enumerated type can only be one of the values of the enumeration
2379     (as defined in the C++ standard; basically, a value that can be
2380     represented in the minimum number of bits needed to represent all
2381     the enumerators).  This assumption may not be valid if the program
2382     uses a cast to convert an arbitrary integer value to the
2383     enumerated type.
2384
2385`-ftemplate-backtrace-limit=N'
2386     Set the maximum number of template instantiation notes for a single
2387     warning or error to N.  The default value is 10.
2388
2389`-ftemplate-depth=N'
2390     Set the maximum instantiation depth for template classes to N.  A
2391     limit on the template instantiation depth is needed to detect
2392     endless recursions during template class instantiation.  ANSI/ISO
2393     C++ conforming programs must not rely on a maximum depth greater
2394     than 17 (changed to 1024 in C++11).  The default value is 900, as
2395     the compiler can run out of stack space before hitting 1024 in
2396     some situations.
2397
2398`-fno-threadsafe-statics'
2399     Do not emit the extra code to use the routines specified in the C++
2400     ABI for thread-safe initialization of local statics.  You can use
2401     this option to reduce code size slightly in code that doesn't need
2402     to be thread-safe.
2403
2404`-fuse-cxa-atexit'
2405     Register destructors for objects with static storage duration with
2406     the `__cxa_atexit' function rather than the `atexit' function.
2407     This option is required for fully standards-compliant handling of
2408     static destructors, but only works if your C library supports
2409     `__cxa_atexit'.
2410
2411`-fno-use-cxa-get-exception-ptr'
2412     Don't use the `__cxa_get_exception_ptr' runtime routine.  This
2413     causes `std::uncaught_exception' to be incorrect, but is necessary
2414     if the runtime routine is not available.
2415
2416`-fvisibility-inlines-hidden'
2417     This switch declares that the user does not attempt to compare
2418     pointers to inline functions or methods where the addresses of the
2419     two functions are taken in different shared objects.
2420
2421     The effect of this is that GCC may, effectively, mark inline
2422     methods with `__attribute__ ((visibility ("hidden")))' so that
2423     they do not appear in the export table of a DSO and do not require
2424     a PLT indirection when used within the DSO.  Enabling this option
2425     can have a dramatic effect on load and link times of a DSO as it
2426     massively reduces the size of the dynamic export table when the
2427     library makes heavy use of templates.
2428
2429     The behavior of this switch is not quite the same as marking the
2430     methods as hidden directly, because it does not affect static
2431     variables local to the function or cause the compiler to deduce
2432     that the function is defined in only one shared object.
2433
2434     You may mark a method as having a visibility explicitly to negate
2435     the effect of the switch for that method.  For example, if you do
2436     want to compare pointers to a particular inline method, you might
2437     mark it as having default visibility.  Marking the enclosing class
2438     with explicit visibility has no effect.
2439
2440     Explicitly instantiated inline methods are unaffected by this
2441     option as their linkage might otherwise cross a shared library
2442     boundary.  *Note Template Instantiation::.
2443
2444`-fvisibility-ms-compat'
2445     This flag attempts to use visibility settings to make GCC's C++
2446     linkage model compatible with that of Microsoft Visual Studio.
2447
2448     The flag makes these changes to GCC's linkage model:
2449
2450       1. It sets the default visibility to `hidden', like
2451          `-fvisibility=hidden'.
2452
2453       2. Types, but not their members, are not hidden by default.
2454
2455       3. The One Definition Rule is relaxed for types without explicit
2456          visibility specifications that are defined in more than one
2457          shared object: those declarations are permitted if they are
2458          permitted when this option is not used.
2459
2460     In new code it is better to use `-fvisibility=hidden' and export
2461     those classes that are intended to be externally visible.
2462     Unfortunately it is possible for code to rely, perhaps
2463     accidentally, on the Visual Studio behavior.
2464
2465     Among the consequences of these changes are that static data
2466     members of the same type with the same name but defined in
2467     different shared objects are different, so changing one does not
2468     change the other; and that pointers to function members defined in
2469     different shared objects may not compare equal.  When this flag is
2470     given, it is a violation of the ODR to define types with the same
2471     name differently.
2472
2473`-fno-weak'
2474     Do not use weak symbol support, even if it is provided by the
2475     linker.  By default, G++ uses weak symbols if they are available.
2476     This option exists only for testing, and should not be used by
2477     end-users; it results in inferior code and has no benefits.  This
2478     option may be removed in a future release of G++.
2479
2480`-nostdinc++'
2481     Do not search for header files in the standard directories
2482     specific to C++, but do still search the other standard
2483     directories.  (This option is used when building the C++ library.)
2484
2485 In addition, these optimization, warning, and code generation options
2486have meanings only for C++ programs:
2487
2488`-fno-default-inline'
2489     Do not assume `inline' for functions defined inside a class scope.
2490     *Note Options That Control Optimization: Optimize Options.  Note
2491     that these functions have linkage like inline functions; they just
2492     aren't inlined by default.
2493
2494`-Wabi (C, Objective-C, C++ and Objective-C++ only)'
2495     Warn when G++ generates code that is probably not compatible with
2496     the vendor-neutral C++ ABI.  Although an effort has been made to
2497     warn about all such cases, there are probably some cases that are
2498     not warned about, even though G++ is generating incompatible code.
2499     There may also be cases where warnings are emitted even though the
2500     code that is generated is compatible.
2501
2502     You should rewrite your code to avoid these warnings if you are
2503     concerned about the fact that code generated by G++ may not be
2504     binary compatible with code generated by other compilers.
2505
2506     The known incompatibilities in `-fabi-version=2' (the default)
2507     include:
2508
2509        * A template with a non-type template parameter of reference
2510          type is mangled incorrectly:
2511               extern int N;
2512               template <int &> struct S {};
2513               void n (S<N>) {2}
2514
2515          This is fixed in `-fabi-version=3'.
2516
2517        * SIMD vector types declared using `__attribute
2518          ((vector_size))' are mangled in a non-standard way that does
2519          not allow for overloading of functions taking vectors of
2520          different sizes.
2521
2522          The mangling is changed in `-fabi-version=4'.
2523
2524     The known incompatibilities in `-fabi-version=1' include:
2525
2526        * Incorrect handling of tail-padding for bit-fields.  G++ may
2527          attempt to pack data into the same byte as a base class.  For
2528          example:
2529
2530               struct A { virtual void f(); int f1 : 1; };
2531               struct B : public A { int f2 : 1; };
2532
2533          In this case, G++ places `B::f2' into the same byte as
2534          `A::f1'; other compilers do not.  You can avoid this problem
2535          by explicitly padding `A' so that its size is a multiple of
2536          the byte size on your platform; that causes G++ and other
2537          compilers to lay out `B' identically.
2538
2539        * Incorrect handling of tail-padding for virtual bases.  G++
2540          does not use tail padding when laying out virtual bases.  For
2541          example:
2542
2543               struct A { virtual void f(); char c1; };
2544               struct B { B(); char c2; };
2545               struct C : public A, public virtual B {};
2546
2547          In this case, G++ does not place `B' into the tail-padding for
2548          `A'; other compilers do.  You can avoid this problem by
2549          explicitly padding `A' so that its size is a multiple of its
2550          alignment (ignoring virtual base classes); that causes G++
2551          and other compilers to lay out `C' identically.
2552
2553        * Incorrect handling of bit-fields with declared widths greater
2554          than that of their underlying types, when the bit-fields
2555          appear in a union.  For example:
2556
2557               union U { int i : 4096; };
2558
2559          Assuming that an `int' does not have 4096 bits, G++ makes the
2560          union too small by the number of bits in an `int'.
2561
2562        * Empty classes can be placed at incorrect offsets.  For
2563          example:
2564
2565               struct A {};
2566
2567               struct B {
2568                 A a;
2569                 virtual void f ();
2570               };
2571
2572               struct C : public B, public A {};
2573
2574          G++ places the `A' base class of `C' at a nonzero offset; it
2575          should be placed at offset zero.  G++ mistakenly believes
2576          that the `A' data member of `B' is already at offset zero.
2577
2578        * Names of template functions whose types involve `typename' or
2579          template template parameters can be mangled incorrectly.
2580
2581               template <typename Q>
2582               void f(typename Q::X) {}
2583
2584               template <template <typename> class Q>
2585               void f(typename Q<int>::X) {}
2586
2587          Instantiations of these templates may be mangled incorrectly.
2588
2589
2590     It also warns about psABI-related changes.  The known psABI
2591     changes at this point include:
2592
2593        * For SysV/x86-64, unions with `long double' members are passed
2594          in memory as specified in psABI.  For example:
2595
2596               union U {
2597                 long double ld;
2598                 int i;
2599               };
2600
2601          `union U' is always passed in memory.
2602
2603
2604`-Wctor-dtor-privacy (C++ and Objective-C++ only)'
2605     Warn when a class seems unusable because all the constructors or
2606     destructors in that class are private, and it has neither friends
2607     nor public static member functions.  Also warn if there are no
2608     non-private methods, and there's at least one private member
2609     function that isn't a constructor or destructor.
2610
2611`-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)'
2612     Warn when `delete' is used to destroy an instance of a class that
2613     has virtual functions and non-virtual destructor. It is unsafe to
2614     delete an instance of a derived class through a pointer to a base
2615     class if the base class does not have a virtual destructor.  This
2616     warning is enabled by `-Wall'.
2617
2618`-Wliteral-suffix (C++ and Objective-C++ only)'
2619     Warn when a string or character literal is followed by a ud-suffix
2620     which does not begin with an underscore.  As a conforming
2621     extension, GCC treats such suffixes as separate preprocessing
2622     tokens in order to maintain backwards compatibility with code that
2623     uses formatting macros from `<inttypes.h>'.  For example:
2624
2625          #define __STDC_FORMAT_MACROS
2626          #include <inttypes.h>
2627          #include <stdio.h>
2628
2629          int main() {
2630            int64_t i64 = 123;
2631            printf("My int64: %"PRId64"\n", i64);
2632          }
2633
2634     In this case, `PRId64' is treated as a separate preprocessing
2635     token.
2636
2637     This warning is enabled by default.
2638
2639`-Wnarrowing (C++ and Objective-C++ only)'
2640     Warn when a narrowing conversion prohibited by C++11 occurs within
2641     `{ }', e.g.
2642
2643          int i = { 2.2 }; // error: narrowing from double to int
2644
2645     This flag is included in `-Wall' and `-Wc++11-compat'.
2646
2647     With `-std=c++11', `-Wno-narrowing' suppresses the diagnostic
2648     required by the standard.  Note that this does not affect the
2649     meaning of well-formed code; narrowing conversions are still
2650     considered ill-formed in SFINAE context.
2651
2652`-Wnoexcept (C++ and Objective-C++ only)'
2653     Warn when a noexcept-expression evaluates to false because of a
2654     call to a function that does not have a non-throwing exception
2655     specification (i.e. `throw()' or `noexcept') but is known by the
2656     compiler to never throw an exception.
2657
2658`-Wnon-virtual-dtor (C++ and Objective-C++ only)'
2659     Warn when a class has virtual functions and an accessible
2660     non-virtual destructor, in which case it is possible but unsafe to
2661     delete an instance of a derived class through a pointer to the
2662     base class.  This warning is also enabled if `-Weffc++' is
2663     specified.
2664
2665`-Wreorder (C++ and Objective-C++ only)'
2666     Warn when the order of member initializers given in the code does
2667     not match the order in which they must be executed.  For instance:
2668
2669          struct A {
2670            int i;
2671            int j;
2672            A(): j (0), i (1) { }
2673          };
2674
2675     The compiler rearranges the member initializers for `i' and `j' to
2676     match the declaration order of the members, emitting a warning to
2677     that effect.  This warning is enabled by `-Wall'.
2678
2679`-fext-numeric-literals (C++ and Objective-C++ only)'
2680     Accept imaginary, fixed-point, or machine-defined literal number
2681     suffixes as GNU extensions.  When this option is turned off these
2682     suffixes are treated as C++11 user-defined literal numeric
2683     suffixes.  This is on by default for all pre-C++11 dialects and
2684     all GNU dialects: `-std=c++98', `-std=gnu++98', `-std=gnu++11',
2685     `-std=gnu++1y'.  This option is off by default for ISO C++11
2686     onwards (`-std=c++11', ...).
2687
2688 The following `-W...' options are not affected by `-Wall'.
2689
2690`-Weffc++ (C++ and Objective-C++ only)'
2691     Warn about violations of the following style guidelines from Scott
2692     Meyers' `Effective C++, Second Edition' book:
2693
2694        * Item 11:  Define a copy constructor and an assignment
2695          operator for classes with dynamically-allocated memory.
2696
2697        * Item 12:  Prefer initialization to assignment in constructors.
2698
2699        * Item 14:  Make destructors virtual in base classes.
2700
2701        * Item 15:  Have `operator=' return a reference to `*this'.
2702
2703        * Item 23:  Don't try to return a reference when you must
2704          return an object.
2705
2706
2707     Also warn about violations of the following style guidelines from
2708     Scott Meyers' `More Effective C++' book:
2709
2710        * Item 6:  Distinguish between prefix and postfix forms of
2711          increment and decrement operators.
2712
2713        * Item 7:  Never overload `&&', `||', or `,'.
2714
2715
2716     When selecting this option, be aware that the standard library
2717     headers do not obey all of these guidelines; use `grep -v' to
2718     filter out those warnings.
2719
2720`-Wstrict-null-sentinel (C++ and Objective-C++ only)'
2721     Warn about the use of an uncasted `NULL' as sentinel.  When
2722     compiling only with GCC this is a valid sentinel, as `NULL' is
2723     defined to `__null'.  Although it is a null pointer constant
2724     rather than a null pointer, it is guaranteed to be of the same
2725     size as a pointer.  But this use is not portable across different
2726     compilers.
2727
2728`-Wno-non-template-friend (C++ and Objective-C++ only)'
2729     Disable warnings when non-templatized friend functions are declared
2730     within a template.  Since the advent of explicit template
2731     specification support in G++, if the name of the friend is an
2732     unqualified-id (i.e., `friend foo(int)'), the C++ language
2733     specification demands that the friend declare or define an
2734     ordinary, nontemplate function.  (Section 14.5.3).  Before G++
2735     implemented explicit specification, unqualified-ids could be
2736     interpreted as a particular specialization of a templatized
2737     function.  Because this non-conforming behavior is no longer the
2738     default behavior for G++, `-Wnon-template-friend' allows the
2739     compiler to check existing code for potential trouble spots and is
2740     on by default.  This new compiler behavior can be turned off with
2741     `-Wno-non-template-friend', which keeps the conformant compiler
2742     code but disables the helpful warning.
2743
2744`-Wold-style-cast (C++ and Objective-C++ only)'
2745     Warn if an old-style (C-style) cast to a non-void type is used
2746     within a C++ program.  The new-style casts (`dynamic_cast',
2747     `static_cast', `reinterpret_cast', and `const_cast') are less
2748     vulnerable to unintended effects and much easier to search for.
2749
2750`-Woverloaded-virtual (C++ and Objective-C++ only)'
2751     Warn when a function declaration hides virtual functions from a
2752     base class.  For example, in:
2753
2754          struct A {
2755            virtual void f();
2756          };
2757
2758          struct B: public A {
2759            void f(int);
2760          };
2761
2762     the `A' class version of `f' is hidden in `B', and code like:
2763
2764          B* b;
2765          b->f();
2766
2767     fails to compile.
2768
2769`-Wno-pmf-conversions (C++ and Objective-C++ only)'
2770     Disable the diagnostic for converting a bound pointer to member
2771     function to a plain pointer.
2772
2773`-Wsign-promo (C++ and Objective-C++ only)'
2774     Warn when overload resolution chooses a promotion from unsigned or
2775     enumerated type to a signed type, over a conversion to an unsigned
2776     type of the same size.  Previous versions of G++ tried to preserve
2777     unsignedness, but the standard mandates the current behavior.
2778
2779
2780File: gcc.info,  Node: Objective-C and Objective-C++ Dialect Options,  Next: Language Independent Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
2781
27823.6 Options Controlling Objective-C and Objective-C++ Dialects
2783==============================================================
2784
2785(NOTE: This manual does not describe the Objective-C and Objective-C++
2786languages themselves.  *Note Language Standards Supported by GCC:
2787Standards, for references.)
2788
2789 This section describes the command-line options that are only
2790meaningful for Objective-C and Objective-C++ programs.  You can also
2791use most of the language-independent GNU compiler options.  For
2792example, you might compile a file `some_class.m' like this:
2793
2794     gcc -g -fgnu-runtime -O -c some_class.m
2795
2796In this example, `-fgnu-runtime' is an option meant only for
2797Objective-C and Objective-C++ programs; you can use the other options
2798with any language supported by GCC.
2799
2800 Note that since Objective-C is an extension of the C language,
2801Objective-C compilations may also use options specific to the C
2802front-end (e.g., `-Wtraditional').  Similarly, Objective-C++
2803compilations may use C++-specific options (e.g., `-Wabi').
2804
2805 Here is a list of options that are _only_ for compiling Objective-C
2806and Objective-C++ programs:
2807
2808`-fconstant-string-class=CLASS-NAME'
2809     Use CLASS-NAME as the name of the class to instantiate for each
2810     literal string specified with the syntax `@"..."'.  The default
2811     class name is `NXConstantString' if the GNU runtime is being used,
2812     and `NSConstantString' if the NeXT runtime is being used (see
2813     below).  The `-fconstant-cfstrings' option, if also present,
2814     overrides the `-fconstant-string-class' setting and cause `@"..."'
2815     literals to be laid out as constant CoreFoundation strings.
2816
2817`-fgnu-runtime'
2818     Generate object code compatible with the standard GNU Objective-C
2819     runtime.  This is the default for most types of systems.
2820
2821`-fnext-runtime'
2822     Generate output compatible with the NeXT runtime.  This is the
2823     default for NeXT-based systems, including Darwin and Mac OS X.
2824     The macro `__NEXT_RUNTIME__' is predefined if (and only if) this
2825     option is used.
2826
2827`-fno-nil-receivers'
2828     Assume that all Objective-C message dispatches (`[receiver
2829     message:arg]') in this translation unit ensure that the receiver is
2830     not `nil'.  This allows for more efficient entry points in the
2831     runtime to be used.  This option is only available in conjunction
2832     with the NeXT runtime and ABI version 0 or 1.
2833
2834`-fobjc-abi-version=N'
2835     Use version N of the Objective-C ABI for the selected runtime.
2836     This option is currently supported only for the NeXT runtime.  In
2837     that case, Version 0 is the traditional (32-bit) ABI without
2838     support for properties and other Objective-C 2.0 additions.
2839     Version 1 is the traditional (32-bit) ABI with support for
2840     properties and other Objective-C 2.0 additions.  Version 2 is the
2841     modern (64-bit) ABI.  If nothing is specified, the default is
2842     Version 0 on 32-bit target machines, and Version 2 on 64-bit
2843     target machines.
2844
2845`-fobjc-call-cxx-cdtors'
2846     For each Objective-C class, check if any of its instance variables
2847     is a C++ object with a non-trivial default constructor.  If so,
2848     synthesize a special `- (id) .cxx_construct' instance method which
2849     runs non-trivial default constructors on any such instance
2850     variables, in order, and then return `self'.  Similarly, check if
2851     any instance variable is a C++ object with a non-trivial
2852     destructor, and if so, synthesize a special `- (void)
2853     .cxx_destruct' method which runs all such default destructors, in
2854     reverse order.
2855
2856     The `- (id) .cxx_construct' and `- (void) .cxx_destruct' methods
2857     thusly generated only operate on instance variables declared in
2858     the current Objective-C class, and not those inherited from
2859     superclasses.  It is the responsibility of the Objective-C runtime
2860     to invoke all such methods in an object's inheritance hierarchy.
2861     The `- (id) .cxx_construct' methods are invoked by the runtime
2862     immediately after a new object instance is allocated; the `-
2863     (void) .cxx_destruct' methods are invoked immediately before the
2864     runtime deallocates an object instance.
2865
2866     As of this writing, only the NeXT runtime on Mac OS X 10.4 and
2867     later has support for invoking the `- (id) .cxx_construct' and `-
2868     (void) .cxx_destruct' methods.
2869
2870`-fobjc-direct-dispatch'
2871     Allow fast jumps to the message dispatcher.  On Darwin this is
2872     accomplished via the comm page.
2873
2874`-fobjc-exceptions'
2875     Enable syntactic support for structured exception handling in
2876     Objective-C, similar to what is offered by C++ and Java.  This
2877     option is required to use the Objective-C keywords `@try',
2878     `@throw', `@catch', `@finally' and `@synchronized'.  This option
2879     is available with both the GNU runtime and the NeXT runtime (but
2880     not available in conjunction with the NeXT runtime on Mac OS X
2881     10.2 and earlier).
2882
2883`-fobjc-gc'
2884     Enable garbage collection (GC) in Objective-C and Objective-C++
2885     programs.  This option is only available with the NeXT runtime; the
2886     GNU runtime has a different garbage collection implementation that
2887     does not require special compiler flags.
2888
2889`-fobjc-nilcheck'
2890     For the NeXT runtime with version 2 of the ABI, check for a nil
2891     receiver in method invocations before doing the actual method call.
2892     This is the default and can be disabled using
2893     `-fno-objc-nilcheck'.  Class methods and super calls are never
2894     checked for nil in this way no matter what this flag is set to.
2895     Currently this flag does nothing when the GNU runtime, or an older
2896     version of the NeXT runtime ABI, is used.
2897
2898`-fobjc-std=objc1'
2899     Conform to the language syntax of Objective-C 1.0, the language
2900     recognized by GCC 4.0.  This only affects the Objective-C
2901     additions to the C/C++ language; it does not affect conformance to
2902     C/C++ standards, which is controlled by the separate C/C++ dialect
2903     option flags.  When this option is used with the Objective-C or
2904     Objective-C++ compiler, any Objective-C syntax that is not
2905     recognized by GCC 4.0 is rejected.  This is useful if you need to
2906     make sure that your Objective-C code can be compiled with older
2907     versions of GCC.
2908
2909`-freplace-objc-classes'
2910     Emit a special marker instructing `ld(1)' not to statically link in
2911     the resulting object file, and allow `dyld(1)' to load it in at
2912     run time instead.  This is used in conjunction with the
2913     Fix-and-Continue debugging mode, where the object file in question
2914     may be recompiled and dynamically reloaded in the course of
2915     program execution, without the need to restart the program itself.
2916     Currently, Fix-and-Continue functionality is only available in
2917     conjunction with the NeXT runtime on Mac OS X 10.3 and later.
2918
2919`-fzero-link'
2920     When compiling for the NeXT runtime, the compiler ordinarily
2921     replaces calls to `objc_getClass("...")' (when the name of the
2922     class is known at compile time) with static class references that
2923     get initialized at load time, which improves run-time performance.
2924     Specifying the `-fzero-link' flag suppresses this behavior and
2925     causes calls to `objc_getClass("...")' to be retained.  This is
2926     useful in Zero-Link debugging mode, since it allows for individual
2927     class implementations to be modified during program execution.
2928     The GNU runtime currently always retains calls to
2929     `objc_get_class("...")' regardless of command-line options.
2930
2931`-gen-decls'
2932     Dump interface declarations for all classes seen in the source
2933     file to a file named `SOURCENAME.decl'.
2934
2935`-Wassign-intercept (Objective-C and Objective-C++ only)'
2936     Warn whenever an Objective-C assignment is being intercepted by the
2937     garbage collector.
2938
2939`-Wno-protocol (Objective-C and Objective-C++ only)'
2940     If a class is declared to implement a protocol, a warning is
2941     issued for every method in the protocol that is not implemented by
2942     the class.  The default behavior is to issue a warning for every
2943     method not explicitly implemented in the class, even if a method
2944     implementation is inherited from the superclass.  If you use the
2945     `-Wno-protocol' option, then methods inherited from the superclass
2946     are considered to be implemented, and no warning is issued for
2947     them.
2948
2949`-Wselector (Objective-C and Objective-C++ only)'
2950     Warn if multiple methods of different types for the same selector
2951     are found during compilation.  The check is performed on the list
2952     of methods in the final stage of compilation.  Additionally, a
2953     check is performed for each selector appearing in a
2954     `@selector(...)'  expression, and a corresponding method for that
2955     selector has been found during compilation.  Because these checks
2956     scan the method table only at the end of compilation, these
2957     warnings are not produced if the final stage of compilation is not
2958     reached, for example because an error is found during compilation,
2959     or because the `-fsyntax-only' option is being used.
2960
2961`-Wstrict-selector-match (Objective-C and Objective-C++ only)'
2962     Warn if multiple methods with differing argument and/or return
2963     types are found for a given selector when attempting to send a
2964     message using this selector to a receiver of type `id' or `Class'.
2965     When this flag is off (which is the default behavior), the
2966     compiler omits such warnings if any differences found are confined
2967     to types that share the same size and alignment.
2968
2969`-Wundeclared-selector (Objective-C and Objective-C++ only)'
2970     Warn if a `@selector(...)' expression referring to an undeclared
2971     selector is found.  A selector is considered undeclared if no
2972     method with that name has been declared before the
2973     `@selector(...)' expression, either explicitly in an `@interface'
2974     or `@protocol' declaration, or implicitly in an `@implementation'
2975     section.  This option always performs its checks as soon as a
2976     `@selector(...)' expression is found, while `-Wselector' only
2977     performs its checks in the final stage of compilation.  This also
2978     enforces the coding style convention that methods and selectors
2979     must be declared before being used.
2980
2981`-print-objc-runtime-info'
2982     Generate C header describing the largest structure that is passed
2983     by value, if any.
2984
2985
2986
2987File: gcc.info,  Node: Language Independent Options,  Next: Warning Options,  Prev: Objective-C and Objective-C++ Dialect Options,  Up: Invoking GCC
2988
29893.7 Options to Control Diagnostic Messages Formatting
2990=====================================================
2991
2992Traditionally, diagnostic messages have been formatted irrespective of
2993the output device's aspect (e.g. its width, ...).  You can use the
2994options described below to control the formatting algorithm for
2995diagnostic messages, e.g. how many characters per line, how often
2996source location information should be reported.  Note that some
2997language front ends may not honor these options.
2998
2999`-fmessage-length=N'
3000     Try to format error messages so that they fit on lines of about N
3001     characters.  The default is 72 characters for `g++' and 0 for the
3002     rest of the front ends supported by GCC.  If N is zero, then no
3003     line-wrapping is done; each error message appears on a single line.
3004
3005`-fdiagnostics-show-location=once'
3006     Only meaningful in line-wrapping mode.  Instructs the diagnostic
3007     messages reporter to emit source location information _once_; that
3008     is, in case the message is too long to fit on a single physical
3009     line and has to be wrapped, the source location won't be emitted
3010     (as prefix) again, over and over, in subsequent continuation
3011     lines.  This is the default behavior.
3012
3013`-fdiagnostics-show-location=every-line'
3014     Only meaningful in line-wrapping mode.  Instructs the diagnostic
3015     messages reporter to emit the same source location information (as
3016     prefix) for physical lines that result from the process of breaking
3017     a message which is too long to fit on a single line.
3018
3019`-fno-diagnostics-show-option'
3020     By default, each diagnostic emitted includes text indicating the
3021     command-line option that directly controls the diagnostic (if such
3022     an option is known to the diagnostic machinery).  Specifying the
3023     `-fno-diagnostics-show-option' flag suppresses that behavior.
3024
3025`-fno-diagnostics-show-caret'
3026     By default, each diagnostic emitted includes the original source
3027     line and a caret '^' indicating the column.  This option
3028     suppresses this information.
3029
3030
3031
3032File: gcc.info,  Node: Warning Options,  Next: Debugging Options,  Prev: Language Independent Options,  Up: Invoking GCC
3033
30343.8 Options to Request or Suppress Warnings
3035===========================================
3036
3037Warnings are diagnostic messages that report constructions that are not
3038inherently erroneous but that are risky or suggest there may have been
3039an error.
3040
3041 The following language-independent options do not enable specific
3042warnings but control the kinds of diagnostics produced by GCC.
3043
3044`-fsyntax-only'
3045     Check the code for syntax errors, but don't do anything beyond
3046     that.
3047
3048`-fmax-errors=N'
3049     Limits the maximum number of error messages to N, at which point
3050     GCC bails out rather than attempting to continue processing the
3051     source code.  If N is 0 (the default), there is no limit on the
3052     number of error messages produced.  If `-Wfatal-errors' is also
3053     specified, then `-Wfatal-errors' takes precedence over this option.
3054
3055`-w'
3056     Inhibit all warning messages.
3057
3058`-Werror'
3059     Make all warnings into errors.
3060
3061`-Werror='
3062     Make the specified warning into an error.  The specifier for a
3063     warning is appended; for example `-Werror=switch' turns the
3064     warnings controlled by `-Wswitch' into errors.  This switch takes a
3065     negative form, to be used to negate `-Werror' for specific
3066     warnings; for example `-Wno-error=switch' makes `-Wswitch'
3067     warnings not be errors, even when `-Werror' is in effect.
3068
3069     The warning message for each controllable warning includes the
3070     option that controls the warning.  That option can then be used
3071     with `-Werror=' and `-Wno-error=' as described above.  (Printing
3072     of the option in the warning message can be disabled using the
3073     `-fno-diagnostics-show-option' flag.)
3074
3075     Note that specifying `-Werror='FOO automatically implies `-W'FOO.
3076     However, `-Wno-error='FOO does not imply anything.
3077
3078`-Wfatal-errors'
3079     This option causes the compiler to abort compilation on the first
3080     error occurred rather than trying to keep going and printing
3081     further error messages.
3082
3083
3084 You can request many specific warnings with options beginning with
3085`-W', for example `-Wimplicit' to request warnings on implicit
3086declarations.  Each of these specific warning options also has a
3087negative form beginning `-Wno-' to turn off warnings; for example,
3088`-Wno-implicit'.  This manual lists only one of the two forms,
3089whichever is not the default.  For further language-specific options
3090also refer to *note C++ Dialect Options:: and *note Objective-C and
3091Objective-C++ Dialect Options::.
3092
3093 When an unrecognized warning option is requested (e.g.,
3094`-Wunknown-warning'), GCC emits a diagnostic stating that the option is
3095not recognized.  However, if the `-Wno-' form is used, the behavior is
3096slightly different: no diagnostic is produced for
3097`-Wno-unknown-warning' unless other diagnostics are being produced.
3098This allows the use of new `-Wno-' options with old compilers, but if
3099something goes wrong, the compiler warns that an unrecognized option is
3100present.
3101
3102`-Wpedantic'
3103`-pedantic'
3104     Issue all the warnings demanded by strict ISO C and ISO C++;
3105     reject all programs that use forbidden extensions, and some other
3106     programs that do not follow ISO C and ISO C++.  For ISO C, follows
3107     the version of the ISO C standard specified by any `-std' option
3108     used.
3109
3110     Valid ISO C and ISO C++ programs should compile properly with or
3111     without this option (though a rare few require `-ansi' or a `-std'
3112     option specifying the required version of ISO C).  However,
3113     without this option, certain GNU extensions and traditional C and
3114     C++ features are supported as well.  With this option, they are
3115     rejected.
3116
3117     `-Wpedantic' does not cause warning messages for use of the
3118     alternate keywords whose names begin and end with `__'.  Pedantic
3119     warnings are also disabled in the expression that follows
3120     `__extension__'.  However, only system header files should use
3121     these escape routes; application programs should avoid them.
3122     *Note Alternate Keywords::.
3123
3124     Some users try to use `-Wpedantic' to check programs for strict ISO
3125     C conformance.  They soon find that it does not do quite what they
3126     want: it finds some non-ISO practices, but not all--only those for
3127     which ISO C _requires_ a diagnostic, and some others for which
3128     diagnostics have been added.
3129
3130     A feature to report any failure to conform to ISO C might be
3131     useful in some instances, but would require considerable
3132     additional work and would be quite different from `-Wpedantic'.
3133     We don't have plans to support such a feature in the near future.
3134
3135     Where the standard specified with `-std' represents a GNU extended
3136     dialect of C, such as `gnu90' or `gnu99', there is a corresponding
3137     "base standard", the version of ISO C on which the GNU extended
3138     dialect is based.  Warnings from `-Wpedantic' are given where they
3139     are required by the base standard.  (It does not make sense for
3140     such warnings to be given only for features not in the specified
3141     GNU C dialect, since by definition the GNU dialects of C include
3142     all features the compiler supports with the given option, and
3143     there would be nothing to warn about.)
3144
3145`-pedantic-errors'
3146     Like `-Wpedantic', except that errors are produced rather than
3147     warnings.
3148
3149`-Wall'
3150     This enables all the warnings about constructions that some users
3151     consider questionable, and that are easy to avoid (or modify to
3152     prevent the warning), even in conjunction with macros.  This also
3153     enables some language-specific warnings described in *note C++
3154     Dialect Options:: and *note Objective-C and Objective-C++ Dialect
3155     Options::.
3156
3157     `-Wall' turns on the following warning flags:
3158
3159          -Waddress
3160          -Warray-bounds (only with `-O2')
3161          -Wc++11-compat
3162          -Wchar-subscripts
3163          -Wenum-compare (in C/ObjC; this is on by default in C++)
3164          -Wimplicit-int (C and Objective-C only)
3165          -Wimplicit-function-declaration (C and Objective-C only)
3166          -Wcomment
3167          -Wformat
3168          -Wmain (only for C/ObjC and unless `-ffreestanding')
3169          -Wmaybe-uninitialized
3170          -Wmissing-braces (only for C/ObjC)
3171          -Wnonnull
3172          -Wparentheses
3173          -Wpointer-sign
3174          -Wreorder
3175          -Wreturn-type
3176          -Wsequence-point
3177          -Wsign-compare (only in C++)
3178          -Wstrict-aliasing
3179          -Wstrict-overflow=1
3180          -Wswitch
3181          -Wtrigraphs
3182          -Wuninitialized
3183          -Wunknown-pragmas
3184          -Wunused-function
3185          -Wunused-label
3186          -Wunused-value
3187          -Wunused-variable
3188          -Wvolatile-register-var
3189
3190     Note that some warning flags are not implied by `-Wall'.  Some of
3191     them warn about constructions that users generally do not consider
3192     questionable, but which occasionally you might wish to check for;
3193     others warn about constructions that are necessary or hard to
3194     avoid in some cases, and there is no simple way to modify the code
3195     to suppress the warning. Some of them are enabled by `-Wextra' but
3196     many of them must be enabled individually.
3197
3198`-Wextra'
3199     This enables some extra warning flags that are not enabled by
3200     `-Wall'. (This option used to be called `-W'.  The older name is
3201     still supported, but the newer name is more descriptive.)
3202
3203          -Wclobbered
3204          -Wempty-body
3205          -Wignored-qualifiers
3206          -Wmissing-field-initializers
3207          -Wmissing-parameter-type (C only)
3208          -Wold-style-declaration (C only)
3209          -Woverride-init
3210          -Wsign-compare
3211          -Wtype-limits
3212          -Wuninitialized
3213          -Wunused-parameter (only with `-Wunused' or `-Wall')
3214          -Wunused-but-set-parameter (only with `-Wunused' or `-Wall')
3215
3216     The option `-Wextra' also prints warning messages for the
3217     following cases:
3218
3219        * A pointer is compared against integer zero with `<', `<=',
3220          `>', or `>='.
3221
3222        * (C++ only) An enumerator and a non-enumerator both appear in a
3223          conditional expression.
3224
3225        * (C++ only) Ambiguous virtual bases.
3226
3227        * (C++ only) Subscripting an array that has been declared
3228          `register'.
3229
3230        * (C++ only) Taking the address of a variable that has been
3231          declared `register'.
3232
3233        * (C++ only) A base class is not initialized in a derived
3234          class's copy constructor.
3235
3236
3237`-Wchar-subscripts'
3238     Warn if an array subscript has type `char'.  This is a common cause
3239     of error, as programmers often forget that this type is signed on
3240     some machines.  This warning is enabled by `-Wall'.
3241
3242`-Wcomment'
3243     Warn whenever a comment-start sequence `/*' appears in a `/*'
3244     comment, or whenever a Backslash-Newline appears in a `//' comment.
3245     This warning is enabled by `-Wall'.
3246
3247`-Wno-coverage-mismatch'
3248     Warn if feedback profiles do not match when using the
3249     `-fprofile-use' option.  If a source file is changed between
3250     compiling with `-fprofile-gen' and with `-fprofile-use', the files
3251     with the profile feedback can fail to match the source file and
3252     GCC cannot use the profile feedback information.  By default, this
3253     warning is enabled and is treated as an error.
3254     `-Wno-coverage-mismatch' can be used to disable the warning or
3255     `-Wno-error=coverage-mismatch' can be used to disable the error.
3256     Disabling the error for this warning can result in poorly
3257     optimized code and is useful only in the case of very minor
3258     changes such as bug fixes to an existing code-base.  Completely
3259     disabling the warning is not recommended.
3260
3261`-Wno-cpp'
3262     (C, Objective-C, C++, Objective-C++ and Fortran only)
3263
3264     Suppress warning messages emitted by `#warning' directives.
3265
3266`-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)'
3267     Give a warning when a value of type `float' is implicitly promoted
3268     to `double'.  CPUs with a 32-bit "single-precision" floating-point
3269     unit implement `float' in hardware, but emulate `double' in
3270     software.  On such a machine, doing computations using `double'
3271     values is much more expensive because of the overhead required for
3272     software emulation.
3273
3274     It is easy to accidentally do computations with `double' because
3275     floating-point literals are implicitly of type `double'.  For
3276     example, in:
3277          float area(float radius)
3278          {
3279             return 3.14159 * radius * radius;
3280          }
3281     the compiler performs the entire computation with `double' because
3282     the floating-point literal is a `double'.
3283
3284`-Wformat'
3285`-Wformat=N'
3286     Check calls to `printf' and `scanf', etc., to make sure that the
3287     arguments supplied have types appropriate to the format string
3288     specified, and that the conversions specified in the format string
3289     make sense.  This includes standard functions, and others
3290     specified by format attributes (*note Function Attributes::), in
3291     the `printf', `scanf', `strftime' and `strfmon' (an X/Open
3292     extension, not in the C standard) families (or other
3293     target-specific families).  Which functions are checked without
3294     format attributes having been specified depends on the standard
3295     version selected, and such checks of functions without the
3296     attribute specified are disabled by `-ffreestanding' or
3297     `-fno-builtin'.
3298
3299     The formats are checked against the format features supported by
3300     GNU libc version 2.2.  These include all ISO C90 and C99 features,
3301     as well as features from the Single Unix Specification and some
3302     BSD and GNU extensions.  Other library implementations may not
3303     support all these features; GCC does not support warning about
3304     features that go beyond a particular library's limitations.
3305     However, if `-Wpedantic' is used with `-Wformat', warnings are
3306     given about format features not in the selected standard version
3307     (but not for `strfmon' formats, since those are not in any version
3308     of the C standard).  *Note Options Controlling C Dialect: C
3309     Dialect Options.
3310
3311    `-Wformat=1'
3312    `-Wformat'
3313          Option `-Wformat' is equivalent to `-Wformat=1', and
3314          `-Wno-format' is equivalent to `-Wformat=0'.  Since
3315          `-Wformat' also checks for null format arguments for several
3316          functions, `-Wformat' also implies `-Wnonnull'.  Some aspects
3317          of this level of format checking can be disabled by the
3318          options: `-Wno-format-contains-nul',
3319          `-Wno-format-extra-args', and `-Wno-format-zero-length'.
3320          `-Wformat' is enabled by `-Wall'.
3321
3322    `-Wno-format-contains-nul'
3323          If `-Wformat' is specified, do not warn about format strings
3324          that contain NUL bytes.
3325
3326    `-Wno-format-extra-args'
3327          If `-Wformat' is specified, do not warn about excess
3328          arguments to a `printf' or `scanf' format function.  The C
3329          standard specifies that such arguments are ignored.
3330
3331          Where the unused arguments lie between used arguments that are
3332          specified with `$' operand number specifications, normally
3333          warnings are still given, since the implementation could not
3334          know what type to pass to `va_arg' to skip the unused
3335          arguments.  However, in the case of `scanf' formats, this
3336          option suppresses the warning if the unused arguments are all
3337          pointers, since the Single Unix Specification says that such
3338          unused arguments are allowed.
3339
3340    `-Wno-format-zero-length'
3341          If `-Wformat' is specified, do not warn about zero-length
3342          formats.  The C standard specifies that zero-length formats
3343          are allowed.
3344
3345    `-Wformat=2'
3346          Enable `-Wformat' plus additional format checks.  Currently
3347          equivalent to `-Wformat -Wformat-nonliteral -Wformat-security
3348          -Wformat-y2k'.
3349
3350    `-Wformat-nonliteral'
3351          If `-Wformat' is specified, also warn if the format string is
3352          not a string literal and so cannot be checked, unless the
3353          format function takes its format arguments as a `va_list'.
3354
3355    `-Wformat-security'
3356          If `-Wformat' is specified, also warn about uses of format
3357          functions that represent possible security problems.  At
3358          present, this warns about calls to `printf' and `scanf'
3359          functions where the format string is not a string literal and
3360          there are no format arguments, as in `printf (foo);'.  This
3361          may be a security hole if the format string came from
3362          untrusted input and contains `%n'.  (This is currently a
3363          subset of what `-Wformat-nonliteral' warns about, but in
3364          future warnings may be added to `-Wformat-security' that are
3365          not included in `-Wformat-nonliteral'.)
3366
3367    `-Wformat-y2k'
3368          If `-Wformat' is specified, also warn about `strftime'
3369          formats that may yield only a two-digit year.
3370
3371`-Wnonnull'
3372     Warn about passing a null pointer for arguments marked as
3373     requiring a non-null value by the `nonnull' function attribute.
3374
3375     `-Wnonnull' is included in `-Wall' and `-Wformat'.  It can be
3376     disabled with the `-Wno-nonnull' option.
3377
3378`-Winit-self (C, C++, Objective-C and Objective-C++ only)'
3379     Warn about uninitialized variables that are initialized with
3380     themselves.  Note this option can only be used with the
3381     `-Wuninitialized' option.
3382
3383     For example, GCC warns about `i' being uninitialized in the
3384     following snippet only when `-Winit-self' has been specified:
3385          int f()
3386          {
3387            int i = i;
3388            return i;
3389          }
3390
3391     This warning is enabled by `-Wall' in C++.
3392
3393`-Wimplicit-int (C and Objective-C only)'
3394     Warn when a declaration does not specify a type.  This warning is
3395     enabled by `-Wall'.
3396
3397`-Wimplicit-function-declaration (C and Objective-C only)'
3398     Give a warning whenever a function is used before being declared.
3399     In C99 mode (`-std=c99' or `-std=gnu99'), this warning is enabled
3400     by default and it is made into an error by `-pedantic-errors'.
3401     This warning is also enabled by `-Wall'.
3402
3403`-Wimplicit (C and Objective-C only)'
3404     Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'.
3405     This warning is enabled by `-Wall'.
3406
3407`-Wignored-qualifiers (C and C++ only)'
3408     Warn if the return type of a function has a type qualifier such as
3409     `const'.  For ISO C such a type qualifier has no effect, since the
3410     value returned by a function is not an lvalue.  For C++, the
3411     warning is only emitted for scalar types or `void'.  ISO C
3412     prohibits qualified `void' return types on function definitions,
3413     so such return types always receive a warning even without this
3414     option.
3415
3416     This warning is also enabled by `-Wextra'.
3417
3418`-Wmain'
3419     Warn if the type of `main' is suspicious.  `main' should be a
3420     function with external linkage, returning int, taking either zero
3421     arguments, two, or three arguments of appropriate types.  This
3422     warning is enabled by default in C++ and is enabled by either
3423     `-Wall' or `-Wpedantic'.
3424
3425`-Wmissing-braces'
3426     Warn if an aggregate or union initializer is not fully bracketed.
3427     In the following example, the initializer for `a' is not fully
3428     bracketed, but that for `b' is fully bracketed.  This warning is
3429     enabled by `-Wall' in C.
3430
3431          int a[2][2] = { 0, 1, 2, 3 };
3432          int b[2][2] = { { 0, 1 }, { 2, 3 } };
3433
3434     This warning is enabled by `-Wall'.
3435
3436`-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)'
3437     Warn if a user-supplied include directory does not exist.
3438
3439`-Wparentheses'
3440     Warn if parentheses are omitted in certain contexts, such as when
3441     there is an assignment in a context where a truth value is
3442     expected, or when operators are nested whose precedence people
3443     often get confused about.
3444
3445     Also warn if a comparison like `x<=y<=z' appears; this is
3446     equivalent to `(x<=y ? 1 : 0) <= z', which is a different
3447     interpretation from that of ordinary mathematical notation.
3448
3449     Also warn about constructions where there may be confusion to which
3450     `if' statement an `else' branch belongs.  Here is an example of
3451     such a case:
3452
3453          {
3454            if (a)
3455              if (b)
3456                foo ();
3457            else
3458              bar ();
3459          }
3460
3461     In C/C++, every `else' branch belongs to the innermost possible
3462     `if' statement, which in this example is `if (b)'.  This is often
3463     not what the programmer expected, as illustrated in the above
3464     example by indentation the programmer chose.  When there is the
3465     potential for this confusion, GCC issues a warning when this flag
3466     is specified.  To eliminate the warning, add explicit braces around
3467     the innermost `if' statement so there is no way the `else' can
3468     belong to the enclosing `if'.  The resulting code looks like this:
3469
3470          {
3471            if (a)
3472              {
3473                if (b)
3474                  foo ();
3475                else
3476                  bar ();
3477              }
3478          }
3479
3480     Also warn for dangerous uses of the GNU extension to `?:' with
3481     omitted middle operand. When the condition in the `?': operator is
3482     a boolean expression, the omitted value is always 1.  Often
3483     programmers expect it to be a value computed inside the
3484     conditional expression instead.
3485
3486     This warning is enabled by `-Wall'.
3487
3488`-Wsequence-point'
3489     Warn about code that may have undefined semantics because of
3490     violations of sequence point rules in the C and C++ standards.
3491
3492     The C and C++ standards define the order in which expressions in a
3493     C/C++ program are evaluated in terms of "sequence points", which
3494     represent a partial ordering between the execution of parts of the
3495     program: those executed before the sequence point, and those
3496     executed after it.  These occur after the evaluation of a full
3497     expression (one which is not part of a larger expression), after
3498     the evaluation of the first operand of a `&&', `||', `? :' or `,'
3499     (comma) operator, before a function is called (but after the
3500     evaluation of its arguments and the expression denoting the called
3501     function), and in certain other places.  Other than as expressed
3502     by the sequence point rules, the order of evaluation of
3503     subexpressions of an expression is not specified.  All these rules
3504     describe only a partial order rather than a total order, since,
3505     for example, if two functions are called within one expression
3506     with no sequence point between them, the order in which the
3507     functions are called is not specified.  However, the standards
3508     committee have ruled that function calls do not overlap.
3509
3510     It is not specified when between sequence points modifications to
3511     the values of objects take effect.  Programs whose behavior
3512     depends on this have undefined behavior; the C and C++ standards
3513     specify that "Between the previous and next sequence point an
3514     object shall have its stored value modified at most once by the
3515     evaluation of an expression.  Furthermore, the prior value shall
3516     be read only to determine the value to be stored.".  If a program
3517     breaks these rules, the results on any particular implementation
3518     are entirely unpredictable.
3519
3520     Examples of code with undefined behavior are `a = a++;', `a[n] =
3521     b[n++]' and `a[i++] = i;'.  Some more complicated cases are not
3522     diagnosed by this option, and it may give an occasional false
3523     positive result, but in general it has been found fairly effective
3524     at detecting this sort of problem in programs.
3525
3526     The standard is worded confusingly, therefore there is some debate
3527     over the precise meaning of the sequence point rules in subtle
3528     cases.  Links to discussions of the problem, including proposed
3529     formal definitions, may be found on the GCC readings page, at
3530     `http://gcc.gnu.org/readings.html'.
3531
3532     This warning is enabled by `-Wall' for C and C++.
3533
3534`-Wno-return-local-addr'
3535     Do not warn about returning a pointer (or in C++, a reference) to a
3536     variable that goes out of scope after the function returns.
3537
3538`-Wreturn-type'
3539     Warn whenever a function is defined with a return type that
3540     defaults to `int'.  Also warn about any `return' statement with no
3541     return value in a function whose return type is not `void'
3542     (falling off the end of the function body is considered returning
3543     without a value), and about a `return' statement with an
3544     expression in a function whose return type is `void'.
3545
3546     For C++, a function without return type always produces a
3547     diagnostic message, even when `-Wno-return-type' is specified.
3548     The only exceptions are `main' and functions defined in system
3549     headers.
3550
3551     This warning is enabled by `-Wall'.
3552
3553`-Wswitch'
3554     Warn whenever a `switch' statement has an index of enumerated type
3555     and lacks a `case' for one or more of the named codes of that
3556     enumeration.  (The presence of a `default' label prevents this
3557     warning.)  `case' labels outside the enumeration range also
3558     provoke warnings when this option is used (even if there is a
3559     `default' label).  This warning is enabled by `-Wall'.
3560
3561`-Wswitch-default'
3562     Warn whenever a `switch' statement does not have a `default' case.
3563
3564`-Wswitch-enum'
3565     Warn whenever a `switch' statement has an index of enumerated type
3566     and lacks a `case' for one or more of the named codes of that
3567     enumeration.  `case' labels outside the enumeration range also
3568     provoke warnings when this option is used.  The only difference
3569     between `-Wswitch' and this option is that this option gives a
3570     warning about an omitted enumeration code even if there is a
3571     `default' label.
3572
3573`-Wsync-nand (C and C++ only)'
3574     Warn when `__sync_fetch_and_nand' and `__sync_nand_and_fetch'
3575     built-in functions are used.  These functions changed semantics in
3576     GCC 4.4.
3577
3578`-Wtrigraphs'
3579     Warn if any trigraphs are encountered that might change the
3580     meaning of the program (trigraphs within comments are not warned
3581     about).  This warning is enabled by `-Wall'.
3582
3583`-Wunused-but-set-parameter'
3584     Warn whenever a function parameter is assigned to, but otherwise
3585     unused (aside from its declaration).
3586
3587     To suppress this warning use the `unused' attribute (*note
3588     Variable Attributes::).
3589
3590     This warning is also enabled by `-Wunused' together with `-Wextra'.
3591
3592`-Wunused-but-set-variable'
3593     Warn whenever a local variable is assigned to, but otherwise unused
3594     (aside from its declaration).  This warning is enabled by `-Wall'.
3595
3596     To suppress this warning use the `unused' attribute (*note
3597     Variable Attributes::).
3598
3599     This warning is also enabled by `-Wunused', which is enabled by
3600     `-Wall'.
3601
3602`-Wunused-function'
3603     Warn whenever a static function is declared but not defined or a
3604     non-inline static function is unused.  This warning is enabled by
3605     `-Wall'.
3606
3607`-Wunused-label'
3608     Warn whenever a label is declared but not used.  This warning is
3609     enabled by `-Wall'.
3610
3611     To suppress this warning use the `unused' attribute (*note
3612     Variable Attributes::).
3613
3614`-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)'
3615     Warn when a typedef locally defined in a function is not used.
3616     This warning is enabled by `-Wall'.
3617
3618`-Wunused-parameter'
3619     Warn whenever a function parameter is unused aside from its
3620     declaration.
3621
3622     To suppress this warning use the `unused' attribute (*note
3623     Variable Attributes::).
3624
3625`-Wno-unused-result'
3626     Do not warn if a caller of a function marked with attribute
3627     `warn_unused_result' (*note Function Attributes::) does not use
3628     its return value. The default is `-Wunused-result'.
3629
3630`-Wunused-variable'
3631     Warn whenever a local variable or non-constant static variable is
3632     unused aside from its declaration.  This warning is enabled by
3633     `-Wall'.
3634
3635     To suppress this warning use the `unused' attribute (*note
3636     Variable Attributes::).
3637
3638`-Wunused-value'
3639     Warn whenever a statement computes a result that is explicitly not
3640     used. To suppress this warning cast the unused expression to
3641     `void'. This includes an expression-statement or the left-hand
3642     side of a comma expression that contains no side effects. For
3643     example, an expression such as `x[i,j]' causes a warning, while
3644     `x[(void)i,j]' does not.
3645
3646     This warning is enabled by `-Wall'.
3647
3648`-Wunused'
3649     All the above `-Wunused' options combined.
3650
3651     In order to get a warning about an unused function parameter, you
3652     must either specify `-Wextra -Wunused' (note that `-Wall' implies
3653     `-Wunused'), or separately specify `-Wunused-parameter'.
3654
3655`-Wuninitialized'
3656     Warn if an automatic variable is used without first being
3657     initialized or if a variable may be clobbered by a `setjmp' call.
3658     In C++, warn if a non-static reference or non-static `const' member
3659     appears in a class without constructors.
3660
3661     If you want to warn about code that uses the uninitialized value
3662     of the variable in its own initializer, use the `-Winit-self'
3663     option.
3664
3665     These warnings occur for individual uninitialized or clobbered
3666     elements of structure, union or array variables as well as for
3667     variables that are uninitialized or clobbered as a whole.  They do
3668     not occur for variables or elements declared `volatile'.  Because
3669     these warnings depend on optimization, the exact variables or
3670     elements for which there are warnings depends on the precise
3671     optimization options and version of GCC used.
3672
3673     Note that there may be no warning about a variable that is used
3674     only to compute a value that itself is never used, because such
3675     computations may be deleted by data flow analysis before the
3676     warnings are printed.
3677
3678`-Wmaybe-uninitialized'
3679     For an automatic variable, if there exists a path from the function
3680     entry to a use of the variable that is initialized, but there exist
3681     some other paths for which the variable is not initialized, the
3682     compiler emits a warning if it cannot prove the uninitialized
3683     paths are not executed at run time. These warnings are made
3684     optional because GCC is not smart enough to see all the reasons
3685     why the code might be correct in spite of appearing to have an
3686     error.  Here is one example of how this can happen:
3687
3688          {
3689            int x;
3690            switch (y)
3691              {
3692              case 1: x = 1;
3693                break;
3694              case 2: x = 4;
3695                break;
3696              case 3: x = 5;
3697              }
3698            foo (x);
3699          }
3700
3701     If the value of `y' is always 1, 2 or 3, then `x' is always
3702     initialized, but GCC doesn't know this. To suppress the warning,
3703     you need to provide a default case with assert(0) or similar code.
3704
3705     This option also warns when a non-volatile automatic variable
3706     might be changed by a call to `longjmp'.  These warnings as well
3707     are possible only in optimizing compilation.
3708
3709     The compiler sees only the calls to `setjmp'.  It cannot know
3710     where `longjmp' will be called; in fact, a signal handler could
3711     call it at any point in the code.  As a result, you may get a
3712     warning even when there is in fact no problem because `longjmp'
3713     cannot in fact be called at the place that would cause a problem.
3714
3715     Some spurious warnings can be avoided if you declare all the
3716     functions you use that never return as `noreturn'.  *Note Function
3717     Attributes::.
3718
3719     This warning is enabled by `-Wall' or `-Wextra'.
3720
3721`-Wunknown-pragmas'
3722     Warn when a `#pragma' directive is encountered that is not
3723     understood by GCC.  If this command-line option is used, warnings
3724     are even issued for unknown pragmas in system header files.  This
3725     is not the case if the warnings are only enabled by the `-Wall'
3726     command-line option.
3727
3728`-Wno-pragmas'
3729     Do not warn about misuses of pragmas, such as incorrect parameters,
3730     invalid syntax, or conflicts between pragmas.  See also
3731     `-Wunknown-pragmas'.
3732
3733`-Wstrict-aliasing'
3734     This option is only active when `-fstrict-aliasing' is active.  It
3735     warns about code that might break the strict aliasing rules that
3736     the compiler is using for optimization.  The warning does not
3737     catch all cases, but does attempt to catch the more common
3738     pitfalls.  It is included in `-Wall'.  It is equivalent to
3739     `-Wstrict-aliasing=3'
3740
3741`-Wstrict-aliasing=n'
3742     This option is only active when `-fstrict-aliasing' is active.  It
3743     warns about code that might break the strict aliasing rules that
3744     the compiler is using for optimization.  Higher levels correspond
3745     to higher accuracy (fewer false positives).  Higher levels also
3746     correspond to more effort, similar to the way `-O' works.
3747     `-Wstrict-aliasing' is equivalent to `-Wstrict-aliasing=3'.
3748
3749     Level 1: Most aggressive, quick, least accurate.  Possibly useful
3750     when higher levels do not warn but `-fstrict-aliasing' still
3751     breaks the code, as it has very few false negatives.  However, it
3752     has many false positives.  Warns for all pointer conversions
3753     between possibly incompatible types, even if never dereferenced.
3754     Runs in the front end only.
3755
3756     Level 2: Aggressive, quick, not too precise.  May still have many
3757     false positives (not as many as level 1 though), and few false
3758     negatives (but possibly more than level 1).  Unlike level 1, it
3759     only warns when an address is taken.  Warns about incomplete
3760     types.  Runs in the front end only.
3761
3762     Level 3 (default for `-Wstrict-aliasing'): Should have very few
3763     false positives and few false negatives.  Slightly slower than
3764     levels 1 or 2 when optimization is enabled.  Takes care of the
3765     common pun+dereference pattern in the front end:
3766     `*(int*)&some_float'.  If optimization is enabled, it also runs in
3767     the back end, where it deals with multiple statement cases using
3768     flow-sensitive points-to information.  Only warns when the
3769     converted pointer is dereferenced.  Does not warn about incomplete
3770     types.
3771
3772`-Wstrict-overflow'
3773`-Wstrict-overflow=N'
3774     This option is only active when `-fstrict-overflow' is active.  It
3775     warns about cases where the compiler optimizes based on the
3776     assumption that signed overflow does not occur.  Note that it does
3777     not warn about all cases where the code might overflow: it only
3778     warns about cases where the compiler implements some optimization.
3779     Thus this warning depends on the optimization level.
3780
3781     An optimization that assumes that signed overflow does not occur is
3782     perfectly safe if the values of the variables involved are such
3783     that overflow never does, in fact, occur.  Therefore this warning
3784     can easily give a false positive: a warning about code that is not
3785     actually a problem.  To help focus on important issues, several
3786     warning levels are defined.  No warnings are issued for the use of
3787     undefined signed overflow when estimating how many iterations a
3788     loop requires, in particular when determining whether a loop will
3789     be executed at all.
3790
3791    `-Wstrict-overflow=1'
3792          Warn about cases that are both questionable and easy to
3793          avoid.  For example,  with `-fstrict-overflow', the compiler
3794          simplifies `x + 1 > x' to `1'.  This level of
3795          `-Wstrict-overflow' is enabled by `-Wall'; higher levels are
3796          not, and must be explicitly requested.
3797
3798    `-Wstrict-overflow=2'
3799          Also warn about other cases where a comparison is simplified
3800          to a constant.  For example: `abs (x) >= 0'.  This can only be
3801          simplified when `-fstrict-overflow' is in effect, because
3802          `abs (INT_MIN)' overflows to `INT_MIN', which is less than
3803          zero.  `-Wstrict-overflow' (with no level) is the same as
3804          `-Wstrict-overflow=2'.
3805
3806    `-Wstrict-overflow=3'
3807          Also warn about other cases where a comparison is simplified.
3808          For example: `x + 1 > 1' is simplified to `x > 0'.
3809
3810    `-Wstrict-overflow=4'
3811          Also warn about other simplifications not covered by the
3812          above cases.  For example: `(x * 10) / 5' is simplified to `x
3813          * 2'.
3814
3815    `-Wstrict-overflow=5'
3816          Also warn about cases where the compiler reduces the
3817          magnitude of a constant involved in a comparison.  For
3818          example: `x + 2 > y' is simplified to `x + 1 >= y'.  This is
3819          reported only at the highest warning level because this
3820          simplification applies to many comparisons, so this warning
3821          level gives a very large number of false positives.
3822
3823`-Wsuggest-attribute=[pure|const|noreturn|format]'
3824     Warn for cases where adding an attribute may be beneficial. The
3825     attributes currently supported are listed below.
3826
3827    `-Wsuggest-attribute=pure'
3828    `-Wsuggest-attribute=const'
3829    `-Wsuggest-attribute=noreturn'
3830          Warn about functions that might be candidates for attributes
3831          `pure', `const' or `noreturn'.  The compiler only warns for
3832          functions visible in other compilation units or (in the case
3833          of `pure' and `const') if it cannot prove that the function
3834          returns normally. A function returns normally if it doesn't
3835          contain an infinite loop or return abnormally by throwing,
3836          calling `abort()' or trapping.  This analysis requires option
3837          `-fipa-pure-const', which is enabled by default at `-O' and
3838          higher.  Higher optimization levels improve the accuracy of
3839          the analysis.
3840
3841    `-Wsuggest-attribute=format'
3842    `-Wmissing-format-attribute'
3843          Warn about function pointers that might be candidates for
3844          `format' attributes.  Note these are only possible
3845          candidates, not absolute ones.  GCC guesses that function
3846          pointers with `format' attributes that are used in
3847          assignment, initialization, parameter passing or return
3848          statements should have a corresponding `format' attribute in
3849          the resulting type.  I.e. the left-hand side of the
3850          assignment or initialization, the type of the parameter
3851          variable, or the return type of the containing function
3852          respectively should also have a `format' attribute to avoid
3853          the warning.
3854
3855          GCC also warns about function definitions that might be
3856          candidates for `format' attributes.  Again, these are only
3857          possible candidates.  GCC guesses that `format' attributes
3858          might be appropriate for any function that calls a function
3859          like `vprintf' or `vscanf', but this might not always be the
3860          case, and some functions for which `format' attributes are
3861          appropriate may not be detected.
3862
3863`-Warray-bounds'
3864     This option is only active when `-ftree-vrp' is active (default
3865     for `-O2' and above). It warns about subscripts to arrays that are
3866     always out of bounds. This warning is enabled by `-Wall'.
3867
3868`-Wno-div-by-zero'
3869     Do not warn about compile-time integer division by zero.
3870     Floating-point division by zero is not warned about, as it can be
3871     a legitimate way of obtaining infinities and NaNs.
3872
3873`-Wsystem-headers'
3874     Print warning messages for constructs found in system header files.
3875     Warnings from system headers are normally suppressed, on the
3876     assumption that they usually do not indicate real problems and
3877     would only make the compiler output harder to read.  Using this
3878     command-line option tells GCC to emit warnings from system headers
3879     as if they occurred in user code.  However, note that using
3880     `-Wall' in conjunction with this option does _not_ warn about
3881     unknown pragmas in system headers--for that, `-Wunknown-pragmas'
3882     must also be used.
3883
3884`-Wtrampolines'
3885     Warn about trampolines generated for pointers to nested functions.
3886
3887     A trampoline is a small piece of data or code that is created at
3888     run  time on the stack when the address of a nested function is
3889     taken, and  is used to call the nested function indirectly.  For
3890     some targets, it  is made up of data only and thus requires no
3891     special treatment.  But,  for most targets, it is made up of code
3892     and thus requires the stack  to be made executable in order for
3893     the program to work properly.
3894
3895`-Wfloat-equal'
3896     Warn if floating-point values are used in equality comparisons.
3897
3898     The idea behind this is that sometimes it is convenient (for the
3899     programmer) to consider floating-point values as approximations to
3900     infinitely precise real numbers.  If you are doing this, then you
3901     need to compute (by analyzing the code, or in some other way) the
3902     maximum or likely maximum error that the computation introduces,
3903     and allow for it when performing comparisons (and when producing
3904     output, but that's a different problem).  In particular, instead
3905     of testing for equality, you should check to see whether the two
3906     values have ranges that overlap; and this is done with the
3907     relational operators, so equality comparisons are probably
3908     mistaken.
3909
3910`-Wtraditional (C and Objective-C only)'
3911     Warn about certain constructs that behave differently in
3912     traditional and ISO C.  Also warn about ISO C constructs that have
3913     no traditional C equivalent, and/or problematic constructs that
3914     should be avoided.
3915
3916        * Macro parameters that appear within string literals in the
3917          macro body.  In traditional C macro replacement takes place
3918          within string literals, but in ISO C it does not.
3919
3920        * In traditional C, some preprocessor directives did not exist.
3921          Traditional preprocessors only considered a line to be a
3922          directive if the `#' appeared in column 1 on the line.
3923          Therefore `-Wtraditional' warns about directives that
3924          traditional C understands but ignores because the `#' does
3925          not appear as the first character on the line.  It also
3926          suggests you hide directives like `#pragma' not understood by
3927          traditional C by indenting them.  Some traditional
3928          implementations do not recognize `#elif', so this option
3929          suggests avoiding it altogether.
3930
3931        * A function-like macro that appears without arguments.
3932
3933        * The unary plus operator.
3934
3935        * The `U' integer constant suffix, or the `F' or `L'
3936          floating-point constant suffixes.  (Traditional C does
3937          support the `L' suffix on integer constants.)  Note, these
3938          suffixes appear in macros defined in the system headers of
3939          most modern systems, e.g. the `_MIN'/`_MAX' macros in
3940          `<limits.h>'.  Use of these macros in user code might
3941          normally lead to spurious warnings, however GCC's integrated
3942          preprocessor has enough context to avoid warning in these
3943          cases.
3944
3945        * A function declared external in one block and then used after
3946          the end of the block.
3947
3948        * A `switch' statement has an operand of type `long'.
3949
3950        * A non-`static' function declaration follows a `static' one.
3951          This construct is not accepted by some traditional C
3952          compilers.
3953
3954        * The ISO type of an integer constant has a different width or
3955          signedness from its traditional type.  This warning is only
3956          issued if the base of the constant is ten.  I.e. hexadecimal
3957          or octal values, which typically represent bit patterns, are
3958          not warned about.
3959
3960        * Usage of ISO string concatenation is detected.
3961
3962        * Initialization of automatic aggregates.
3963
3964        * Identifier conflicts with labels.  Traditional C lacks a
3965          separate namespace for labels.
3966
3967        * Initialization of unions.  If the initializer is zero, the
3968          warning is omitted.  This is done under the assumption that
3969          the zero initializer in user code appears conditioned on e.g.
3970          `__STDC__' to avoid missing initializer warnings and relies
3971          on default initialization to zero in the traditional C case.
3972
3973        * Conversions by prototypes between fixed/floating-point values
3974          and vice versa.  The absence of these prototypes when
3975          compiling with traditional C causes serious problems.  This
3976          is a subset of the possible conversion warnings; for the full
3977          set use `-Wtraditional-conversion'.
3978
3979        * Use of ISO C style function definitions.  This warning
3980          intentionally is _not_ issued for prototype declarations or
3981          variadic functions because these ISO C features appear in
3982          your code when using libiberty's traditional C compatibility
3983          macros, `PARAMS' and `VPARAMS'.  This warning is also
3984          bypassed for nested functions because that feature is already
3985          a GCC extension and thus not relevant to traditional C
3986          compatibility.
3987
3988`-Wtraditional-conversion (C and Objective-C only)'
3989     Warn if a prototype causes a type conversion that is different
3990     from what would happen to the same argument in the absence of a
3991     prototype.  This includes conversions of fixed point to floating
3992     and vice versa, and conversions changing the width or signedness
3993     of a fixed-point argument except when the same as the default
3994     promotion.
3995
3996`-Wdeclaration-after-statement (C and Objective-C only)'
3997     Warn when a declaration is found after a statement in a block.
3998     This construct, known from C++, was introduced with ISO C99 and is
3999     by default allowed in GCC.  It is not supported by ISO C90 and was
4000     not supported by GCC versions before GCC 3.0.  *Note Mixed
4001     Declarations::.
4002
4003`-Wundef'
4004     Warn if an undefined identifier is evaluated in an `#if' directive.
4005
4006`-Wno-endif-labels'
4007     Do not warn whenever an `#else' or an `#endif' are followed by
4008     text.
4009
4010`-Wshadow'
4011     Warn whenever a local variable or type declaration shadows another
4012     variable, parameter, type, or class member (in C++), or whenever a
4013     built-in function is shadowed. Note that in C++, the compiler
4014     warns if a local variable shadows an explicit typedef, but not if
4015     it shadows a struct/class/enum.
4016
4017`-Wlarger-than=LEN'
4018     Warn whenever an object of larger than LEN bytes is defined.
4019
4020`-Wframe-larger-than=LEN'
4021     Warn if the size of a function frame is larger than LEN bytes.
4022     The computation done to determine the stack frame size is
4023     approximate and not conservative.  The actual requirements may be
4024     somewhat greater than LEN even if you do not get a warning.  In
4025     addition, any space allocated via `alloca', variable-length
4026     arrays, or related constructs is not included by the compiler when
4027     determining whether or not to issue a warning.
4028
4029`-Wno-free-nonheap-object'
4030     Do not warn when attempting to free an object that was not
4031     allocated on the heap.
4032
4033`-Wstack-usage=LEN'
4034     Warn if the stack usage of a function might be larger than LEN
4035     bytes.  The computation done to determine the stack usage is
4036     conservative.  Any space allocated via `alloca', variable-length
4037     arrays, or related constructs is included by the compiler when
4038     determining whether or not to issue a warning.
4039
4040     The message is in keeping with the output of `-fstack-usage'.
4041
4042        * If the stack usage is fully static but exceeds the specified
4043          amount, it's:
4044
4045                 warning: stack usage is 1120 bytes
4046
4047        * If the stack usage is (partly) dynamic but bounded, it's:
4048
4049                 warning: stack usage might be 1648 bytes
4050
4051        * If the stack usage is (partly) dynamic and not bounded, it's:
4052
4053                 warning: stack usage might be unbounded
4054
4055`-Wunsafe-loop-optimizations'
4056     Warn if the loop cannot be optimized because the compiler cannot
4057     assume anything on the bounds of the loop indices.  With
4058     `-funsafe-loop-optimizations' warn if the compiler makes such
4059     assumptions.
4060
4061`-Wno-pedantic-ms-format (MinGW targets only)'
4062     When used in combination with `-Wformat' and `-pedantic' without
4063     GNU extensions, this option disables the warnings about non-ISO
4064     `printf' / `scanf' format width specifiers `I32', `I64', and `I'
4065     used on Windows targets, which depend on the MS runtime.
4066
4067`-Wpointer-arith'
4068     Warn about anything that depends on the "size of" a function type
4069     or of `void'.  GNU C assigns these types a size of 1, for
4070     convenience in calculations with `void *' pointers and pointers to
4071     functions.  In C++, warn also when an arithmetic operation involves
4072     `NULL'.  This warning is also enabled by `-Wpedantic'.
4073
4074`-Wtype-limits'
4075     Warn if a comparison is always true or always false due to the
4076     limited range of the data type, but do not warn for constant
4077     expressions.  For example, warn if an unsigned variable is
4078     compared against zero with `<' or `>='.  This warning is also
4079     enabled by `-Wextra'.
4080
4081`-Wbad-function-cast (C and Objective-C only)'
4082     Warn whenever a function call is cast to a non-matching type.  For
4083     example, warn if `int malloc()' is cast to `anything *'.
4084
4085`-Wc++-compat (C and Objective-C only)'
4086     Warn about ISO C constructs that are outside of the common subset
4087     of ISO C and ISO C++, e.g. request for implicit conversion from
4088     `void *' to a pointer to non-`void' type.
4089
4090`-Wc++11-compat (C++ and Objective-C++ only)'
4091     Warn about C++ constructs whose meaning differs between ISO C++
4092     1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are
4093     keywords in ISO C++ 2011.  This warning turns on `-Wnarrowing' and
4094     is enabled by `-Wall'.
4095
4096`-Wcast-qual'
4097     Warn whenever a pointer is cast so as to remove a type qualifier
4098     from the target type.  For example, warn if a `const char *' is
4099     cast to an ordinary `char *'.
4100
4101     Also warn when making a cast that introduces a type qualifier in an
4102     unsafe way.  For example, casting `char **' to `const char **' is
4103     unsafe, as in this example:
4104
4105            /* p is char ** value.  */
4106            const char **q = (const char **) p;
4107            /* Assignment of readonly string to const char * is OK.  */
4108            *q = "string";
4109            /* Now char** pointer points to read-only memory.  */
4110            **p = 'b';
4111
4112`-Wcast-align'
4113     Warn whenever a pointer is cast such that the required alignment
4114     of the target is increased.  For example, warn if a `char *' is
4115     cast to an `int *' on machines where integers can only be accessed
4116     at two- or four-byte boundaries.
4117
4118`-Wwrite-strings'
4119     When compiling C, give string constants the type `const
4120     char[LENGTH]' so that copying the address of one into a
4121     non-`const' `char *' pointer produces a warning.  These warnings
4122     help you find at compile time code that can try to write into a
4123     string constant, but only if you have been very careful about
4124     using `const' in declarations and prototypes.  Otherwise, it is
4125     just a nuisance. This is why we did not make `-Wall' request these
4126     warnings.
4127
4128     When compiling C++, warn about the deprecated conversion from
4129     string literals to `char *'.  This warning is enabled by default
4130     for C++ programs.
4131
4132`-Wclobbered'
4133     Warn for variables that might be changed by `longjmp' or `vfork'.
4134     This warning is also enabled by `-Wextra'.
4135
4136`-Wconversion'
4137     Warn for implicit conversions that may alter a value. This includes
4138     conversions between real and integer, like `abs (x)' when `x' is
4139     `double'; conversions between signed and unsigned, like `unsigned
4140     ui = -1'; and conversions to smaller types, like `sqrtf (M_PI)'.
4141     Do not warn for explicit casts like `abs ((int) x)' and `ui =
4142     (unsigned) -1', or if the value is not changed by the conversion
4143     like in `abs (2.0)'.  Warnings about conversions between signed
4144     and unsigned integers can be disabled by using
4145     `-Wno-sign-conversion'.
4146
4147     For C++, also warn for confusing overload resolution for
4148     user-defined conversions; and conversions that never use a type
4149     conversion operator: conversions to `void', the same type, a base
4150     class or a reference to them. Warnings about conversions between
4151     signed and unsigned integers are disabled by default in C++ unless
4152     `-Wsign-conversion' is explicitly enabled.
4153
4154`-Wno-conversion-null (C++ and Objective-C++ only)'
4155     Do not warn for conversions between `NULL' and non-pointer types.
4156     `-Wconversion-null' is enabled by default.
4157
4158`-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)'
4159     Warn when a literal '0' is used as null pointer constant.  This can
4160     be useful to facilitate the conversion to `nullptr' in C++11.
4161
4162`-Wuseless-cast (C++ and Objective-C++ only)'
4163     Warn when an expression is casted to its own type.
4164
4165`-Wempty-body'
4166     Warn if an empty body occurs in an `if', `else' or `do while'
4167     statement.  This warning is also enabled by `-Wextra'.
4168
4169`-Wenum-compare'
4170     Warn about a comparison between values of different enumerated
4171     types.  In C++ enumeral mismatches in conditional expressions are
4172     also diagnosed and the warning is enabled by default.  In C this
4173     warning is enabled by `-Wall'.
4174
4175`-Wjump-misses-init (C, Objective-C only)'
4176     Warn if a `goto' statement or a `switch' statement jumps forward
4177     across the initialization of a variable, or jumps backward to a
4178     label after the variable has been initialized.  This only warns
4179     about variables that are initialized when they are declared.  This
4180     warning is only supported for C and Objective-C; in C++ this sort
4181     of branch is an error in any case.
4182
4183     `-Wjump-misses-init' is included in `-Wc++-compat'.  It can be
4184     disabled with the `-Wno-jump-misses-init' option.
4185
4186`-Wsign-compare'
4187     Warn when a comparison between signed and unsigned values could
4188     produce an incorrect result when the signed value is converted to
4189     unsigned.  This warning is also enabled by `-Wextra'; to get the
4190     other warnings of `-Wextra' without this warning, use `-Wextra
4191     -Wno-sign-compare'.
4192
4193`-Wsign-conversion'
4194     Warn for implicit conversions that may change the sign of an
4195     integer value, like assigning a signed integer expression to an
4196     unsigned integer variable. An explicit cast silences the warning.
4197     In C, this option is enabled also by `-Wconversion'.
4198
4199`-Wsizeof-pointer-memaccess'
4200     Warn for suspicious length parameters to certain string and memory
4201     built-in functions if the argument uses `sizeof'.  This warning
4202     warns e.g.  about `memset (ptr, 0, sizeof (ptr));' if `ptr' is not
4203     an array, but a pointer, and suggests a possible fix, or about
4204     `memcpy (&foo, ptr, sizeof (&foo));'.  This warning is enabled by
4205     `-Wall'.
4206
4207`-Waddress'
4208     Warn about suspicious uses of memory addresses. These include using
4209     the address of a function in a conditional expression, such as
4210     `void func(void); if (func)', and comparisons against the memory
4211     address of a string literal, such as `if (x == "abc")'.  Such uses
4212     typically indicate a programmer error: the address of a function
4213     always evaluates to true, so their use in a conditional usually
4214     indicate that the programmer forgot the parentheses in a function
4215     call; and comparisons against string literals result in unspecified
4216     behavior and are not portable in C, so they usually indicate that
4217     the programmer intended to use `strcmp'.  This warning is enabled
4218     by `-Wall'.
4219
4220`-Wlogical-op'
4221     Warn about suspicious uses of logical operators in expressions.
4222     This includes using logical operators in contexts where a bit-wise
4223     operator is likely to be expected.
4224
4225`-Waggregate-return'
4226     Warn if any functions that return structures or unions are defined
4227     or called.  (In languages where you can return an array, this also
4228     elicits a warning.)
4229
4230`-Wno-aggressive-loop-optimizations'
4231     Warn if in a loop with constant number of iterations the compiler
4232     detects undefined behavior in some statement during one or more of
4233     the iterations.
4234
4235`-Wno-attributes'
4236     Do not warn if an unexpected `__attribute__' is used, such as
4237     unrecognized attributes, function attributes applied to variables,
4238     etc.  This does not stop errors for incorrect use of supported
4239     attributes.
4240
4241`-Wno-builtin-macro-redefined'
4242     Do not warn if certain built-in macros are redefined.  This
4243     suppresses warnings for redefinition of `__TIMESTAMP__',
4244     `__TIME__', `__DATE__', `__FILE__', and `__BASE_FILE__'.
4245
4246`-Wstrict-prototypes (C and Objective-C only)'
4247     Warn if a function is declared or defined without specifying the
4248     argument types.  (An old-style function definition is permitted
4249     without a warning if preceded by a declaration that specifies the
4250     argument types.)
4251
4252`-Wold-style-declaration (C and Objective-C only)'
4253     Warn for obsolescent usages, according to the C Standard, in a
4254     declaration. For example, warn if storage-class specifiers like
4255     `static' are not the first things in a declaration.  This warning
4256     is also enabled by `-Wextra'.
4257
4258`-Wold-style-definition (C and Objective-C only)'
4259     Warn if an old-style function definition is used.  A warning is
4260     given even if there is a previous prototype.
4261
4262`-Wmissing-parameter-type (C and Objective-C only)'
4263     A function parameter is declared without a type specifier in
4264     K&R-style functions:
4265
4266          void foo(bar) { }
4267
4268     This warning is also enabled by `-Wextra'.
4269
4270`-Wmissing-prototypes (C and Objective-C only)'
4271     Warn if a global function is defined without a previous prototype
4272     declaration.  This warning is issued even if the definition itself
4273     provides a prototype.  Use this option to detect global functions
4274     that do not have a matching prototype declaration in a header file.
4275     This option is not valid for C++ because all function declarations
4276     provide prototypes and a non-matching declaration will declare an
4277     overload rather than conflict with an earlier declaration.  Use
4278     `-Wmissing-declarations' to detect missing declarations in C++.
4279
4280`-Wmissing-declarations'
4281     Warn if a global function is defined without a previous
4282     declaration.  Do so even if the definition itself provides a
4283     prototype.  Use this option to detect global functions that are
4284     not declared in header files.  In C, no warnings are issued for
4285     functions with previous non-prototype declarations; use
4286     `-Wmissing-prototype' to detect missing prototypes.  In C++, no
4287     warnings are issued for function templates, or for inline
4288     functions, or for functions in anonymous namespaces.
4289
4290`-Wmissing-field-initializers'
4291     Warn if a structure's initializer has some fields missing.  For
4292     example, the following code causes such a warning, because `x.h'
4293     is implicitly zero:
4294
4295          struct s { int f, g, h; };
4296          struct s x = { 3, 4 };
4297
4298     This option does not warn about designated initializers, so the
4299     following modification does not trigger a warning:
4300
4301          struct s { int f, g, h; };
4302          struct s x = { .f = 3, .g = 4 };
4303
4304     This warning is included in `-Wextra'.  To get other `-Wextra'
4305     warnings without this one, use `-Wextra
4306     -Wno-missing-field-initializers'.
4307
4308`-Wno-multichar'
4309     Do not warn if a multicharacter constant (`'FOOF'') is used.
4310     Usually they indicate a typo in the user's code, as they have
4311     implementation-defined values, and should not be used in portable
4312     code.
4313
4314`-Wnormalized=<none|id|nfc|nfkc>'
4315     In ISO C and ISO C++, two identifiers are different if they are
4316     different sequences of characters.  However, sometimes when
4317     characters outside the basic ASCII character set are used, you can
4318     have two different character sequences that look the same.  To
4319     avoid confusion, the ISO 10646 standard sets out some
4320     "normalization rules" which when applied ensure that two sequences
4321     that look the same are turned into the same sequence.  GCC can
4322     warn you if you are using identifiers that have not been
4323     normalized; this option controls that warning.
4324
4325     There are four levels of warning supported by GCC.  The default is
4326     `-Wnormalized=nfc', which warns about any identifier that is not
4327     in the ISO 10646 "C" normalized form, "NFC".  NFC is the
4328     recommended form for most uses.
4329
4330     Unfortunately, there are some characters allowed in identifiers by
4331     ISO C and ISO C++ that, when turned into NFC, are not allowed in
4332     identifiers.  That is, there's no way to use these symbols in
4333     portable ISO C or C++ and have all your identifiers in NFC.
4334     `-Wnormalized=id' suppresses the warning for these characters.  It
4335     is hoped that future versions of the standards involved will
4336     correct this, which is why this option is not the default.
4337
4338     You can switch the warning off for all characters by writing
4339     `-Wnormalized=none'.  You should only do this if you are using
4340     some other normalization scheme (like "D"), because otherwise you
4341     can easily create bugs that are literally impossible to see.
4342
4343     Some characters in ISO 10646 have distinct meanings but look
4344     identical in some fonts or display methodologies, especially once
4345     formatting has been applied.  For instance `\u207F', "SUPERSCRIPT
4346     LATIN SMALL LETTER N", displays just like a regular `n' that has
4347     been placed in a superscript.  ISO 10646 defines the "NFKC"
4348     normalization scheme to convert all these into a standard form as
4349     well, and GCC warns if your code is not in NFKC if you use
4350     `-Wnormalized=nfkc'.  This warning is comparable to warning about
4351     every identifier that contains the letter O because it might be
4352     confused with the digit 0, and so is not the default, but may be
4353     useful as a local coding convention if the programming environment
4354     cannot be fixed to display these characters distinctly.
4355
4356`-Wno-deprecated'
4357     Do not warn about usage of deprecated features.  *Note Deprecated
4358     Features::.
4359
4360`-Wno-deprecated-declarations'
4361     Do not warn about uses of functions (*note Function Attributes::),
4362     variables (*note Variable Attributes::), and types (*note Type
4363     Attributes::) marked as deprecated by using the `deprecated'
4364     attribute.
4365
4366`-Wno-overflow'
4367     Do not warn about compile-time overflow in constant expressions.
4368
4369`-Woverride-init (C and Objective-C only)'
4370     Warn if an initialized field without side effects is overridden
4371     when using designated initializers (*note Designated Initializers:
4372     Designated Inits.).
4373
4374     This warning is included in `-Wextra'.  To get other `-Wextra'
4375     warnings without this one, use `-Wextra -Wno-override-init'.
4376
4377`-Wpacked'
4378     Warn if a structure is given the packed attribute, but the packed
4379     attribute has no effect on the layout or size of the structure.
4380     Such structures may be mis-aligned for little benefit.  For
4381     instance, in this code, the variable `f.x' in `struct bar' is
4382     misaligned even though `struct bar' does not itself have the
4383     packed attribute:
4384
4385          struct foo {
4386            int x;
4387            char a, b, c, d;
4388          } __attribute__((packed));
4389          struct bar {
4390            char z;
4391            struct foo f;
4392          };
4393
4394`-Wpacked-bitfield-compat'
4395     The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' attribute
4396     on bit-fields of type `char'.  This has been fixed in GCC 4.4 but
4397     the change can lead to differences in the structure layout.  GCC
4398     informs you when the offset of such a field has changed in GCC 4.4.
4399     For example there is no longer a 4-bit padding between field `a'
4400     and `b' in this structure:
4401
4402          struct foo
4403          {
4404            char a:4;
4405            char b:8;
4406          } __attribute__ ((packed));
4407
4408     This warning is enabled by default.  Use
4409     `-Wno-packed-bitfield-compat' to disable this warning.
4410
4411`-Wpadded'
4412     Warn if padding is included in a structure, either to align an
4413     element of the structure or to align the whole structure.
4414     Sometimes when this happens it is possible to rearrange the fields
4415     of the structure to reduce the padding and so make the structure
4416     smaller.
4417
4418`-Wredundant-decls'
4419     Warn if anything is declared more than once in the same scope,
4420     even in cases where multiple declaration is valid and changes
4421     nothing.
4422
4423`-Wnested-externs (C and Objective-C only)'
4424     Warn if an `extern' declaration is encountered within a function.
4425
4426`-Wno-inherited-variadic-ctor'
4427     Suppress warnings about use of C++11 inheriting constructors when
4428     the base class inherited from has a C variadic constructor; the
4429     warning is on by default because the ellipsis is not inherited.
4430
4431`-Winline'
4432     Warn if a function that is declared as inline cannot be inlined.
4433     Even with this option, the compiler does not warn about failures to
4434     inline functions declared in system headers.
4435
4436     The compiler uses a variety of heuristics to determine whether or
4437     not to inline a function.  For example, the compiler takes into
4438     account the size of the function being inlined and the amount of
4439     inlining that has already been done in the current function.
4440     Therefore, seemingly insignificant changes in the source program
4441     can cause the warnings produced by `-Winline' to appear or
4442     disappear.
4443
4444`-Wno-invalid-offsetof (C++ and Objective-C++ only)'
4445     Suppress warnings from applying the `offsetof' macro to a non-POD
4446     type.  According to the 1998 ISO C++ standard, applying `offsetof'
4447     to a non-POD type is undefined.  In existing C++ implementations,
4448     however, `offsetof' typically gives meaningful results even when
4449     applied to certain kinds of non-POD types (such as a simple
4450     `struct' that fails to be a POD type only by virtue of having a
4451     constructor).  This flag is for users who are aware that they are
4452     writing nonportable code and who have deliberately chosen to
4453     ignore the warning about it.
4454
4455     The restrictions on `offsetof' may be relaxed in a future version
4456     of the C++ standard.
4457
4458`-Wno-int-to-pointer-cast'
4459     Suppress warnings from casts to pointer type of an integer of a
4460     different size. In C++, casting to a pointer type of smaller size
4461     is an error. `Wint-to-pointer-cast' is enabled by default.
4462
4463`-Wno-pointer-to-int-cast (C and Objective-C only)'
4464     Suppress warnings from casts from a pointer to an integer type of a
4465     different size.
4466
4467`-Winvalid-pch'
4468     Warn if a precompiled header (*note Precompiled Headers::) is
4469     found in the search path but can't be used.
4470
4471`-Wlong-long'
4472     Warn if `long long' type is used.  This is enabled by either
4473     `-Wpedantic' or `-Wtraditional' in ISO C90 and C++98 modes.  To
4474     inhibit the warning messages, use `-Wno-long-long'.
4475
4476`-Wvariadic-macros'
4477     Warn if variadic macros are used in pedantic ISO C90 mode, or the
4478     GNU alternate syntax when in pedantic ISO C99 mode.  This is
4479     default.  To inhibit the warning messages, use
4480     `-Wno-variadic-macros'.
4481
4482`-Wvarargs'
4483     Warn upon questionable usage of the macros used to handle variable
4484     arguments like `va_start'.  This is default.  To inhibit the
4485     warning messages, use `-Wno-varargs'.
4486
4487`-Wvector-operation-performance'
4488     Warn if vector operation is not implemented via SIMD capabilities
4489     of the architecture.  Mainly useful for the performance tuning.
4490     Vector operation can be implemented `piecewise', which means that
4491     the scalar operation is performed on every vector element; `in
4492     parallel', which means that the vector operation is implemented
4493     using scalars of wider type, which normally is more performance
4494     efficient; and `as a single scalar', which means that vector fits
4495     into a scalar type.
4496
4497`-Wno-virtual-move-assign'
4498     Suppress warnings about inheriting from a virtual base with a
4499     non-trivial C++11 move assignment operator.  This is dangerous
4500     because if the virtual base is reachable along more than one path,
4501     it will be moved multiple times, which can mean both objects end
4502     up in the moved-from state.  If the move assignment operator is
4503     written to avoid moving from a moved-from object, this warning can
4504     be disabled.
4505
4506`-Wvla'
4507     Warn if variable length array is used in the code.  `-Wno-vla'
4508     prevents the `-Wpedantic' warning of the variable length array.
4509
4510`-Wvolatile-register-var'
4511     Warn if a register variable is declared volatile.  The volatile
4512     modifier does not inhibit all optimizations that may eliminate
4513     reads and/or writes to register variables.  This warning is
4514     enabled by `-Wall'.
4515
4516`-Wdisabled-optimization'
4517     Warn if a requested optimization pass is disabled.  This warning
4518     does not generally indicate that there is anything wrong with your
4519     code; it merely indicates that GCC's optimizers are unable to
4520     handle the code effectively.  Often, the problem is that your code
4521     is too big or too complex; GCC refuses to optimize programs when
4522     the optimization itself is likely to take inordinate amounts of
4523     time.
4524
4525`-Wpointer-sign (C and Objective-C only)'
4526     Warn for pointer argument passing or assignment with different
4527     signedness.  This option is only supported for C and Objective-C.
4528     It is implied by `-Wall' and by `-Wpedantic', which can be
4529     disabled with `-Wno-pointer-sign'.
4530
4531`-Wstack-protector'
4532     This option is only active when `-fstack-protector' is active.  It
4533     warns about functions that are not protected against stack
4534     smashing.
4535
4536`-Wno-mudflap'
4537     Suppress warnings about constructs that cannot be instrumented by
4538     `-fmudflap'.
4539
4540`-Woverlength-strings'
4541     Warn about string constants that are longer than the "minimum
4542     maximum" length specified in the C standard.  Modern compilers
4543     generally allow string constants that are much longer than the
4544     standard's minimum limit, but very portable programs should avoid
4545     using longer strings.
4546
4547     The limit applies _after_ string constant concatenation, and does
4548     not count the trailing NUL.  In C90, the limit was 509 characters;
4549     in C99, it was raised to 4095.  C++98 does not specify a normative
4550     minimum maximum, so we do not diagnose overlength strings in C++.
4551
4552     This option is implied by `-Wpedantic', and can be disabled with
4553     `-Wno-overlength-strings'.
4554
4555`-Wunsuffixed-float-constants (C and Objective-C only)'
4556     Issue a warning for any floating constant that does not have a
4557     suffix.  When used together with `-Wsystem-headers' it warns about
4558     such constants in system header files.  This can be useful when
4559     preparing code to use with the `FLOAT_CONST_DECIMAL64' pragma from
4560     the decimal floating-point extension to C99.
4561
4562
4563File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
4564
45653.9 Options for Debugging Your Program or GCC
4566=============================================
4567
4568GCC has various special options that are used for debugging either your
4569program or GCC:
4570
4571`-g'
4572     Produce debugging information in the operating system's native
4573     format (stabs, COFF, XCOFF, or DWARF 2).  GDB can work with this
4574     debugging information.
4575
4576     On most systems that use stabs format, `-g' enables use of extra
4577     debugging information that only GDB can use; this extra information
4578     makes debugging work better in GDB but probably makes other
4579     debuggers crash or refuse to read the program.  If you want to
4580     control for certain whether to generate the extra information, use
4581     `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see
4582     below).
4583
4584     GCC allows you to use `-g' with `-O'.  The shortcuts taken by
4585     optimized code may occasionally produce surprising results: some
4586     variables you declared may not exist at all; flow of control may
4587     briefly move where you did not expect it; some statements may not
4588     be executed because they compute constant results or their values
4589     are already at hand; some statements may execute in different
4590     places because they have been moved out of loops.
4591
4592     Nevertheless it proves possible to debug optimized output.  This
4593     makes it reasonable to use the optimizer for programs that might
4594     have bugs.
4595
4596     The following options are useful when GCC is generated with the
4597     capability for more than one debugging format.
4598
4599`-gsplit-dwarf'
4600     Separate as much dwarf debugging information as possible into a
4601     separate output file with the extension .dwo.  This option allows
4602     the build system to avoid linking files with debug information.  To
4603     be useful, this option requires a debugger capable of reading .dwo
4604     files.
4605
4606`-ggdb'
4607     Produce debugging information for use by GDB.  This means to use
4608     the most expressive format available (DWARF 2, stabs, or the
4609     native format if neither of those are supported), including GDB
4610     extensions if at all possible.
4611
4612`-gpubnames'
4613     Generate dwarf .debug_pubnames and .debug_pubtypes sections.
4614
4615`-gstabs'
4616     Produce debugging information in stabs format (if that is
4617     supported), without GDB extensions.  This is the format used by
4618     DBX on most BSD systems.  On MIPS, Alpha and System V Release 4
4619     systems this option produces stabs debugging output that is not
4620     understood by DBX or SDB.  On System V Release 4 systems this
4621     option requires the GNU assembler.
4622
4623`-feliminate-unused-debug-symbols'
4624     Produce debugging information in stabs format (if that is
4625     supported), for only symbols that are actually used.
4626
4627`-femit-class-debug-always'
4628     Instead of emitting debugging information for a C++ class in only
4629     one object file, emit it in all object files using the class.
4630     This option should be used only with debuggers that are unable to
4631     handle the way GCC normally emits debugging information for
4632     classes because using this option increases the size of debugging
4633     information by as much as a factor of two.
4634
4635`-fdebug-types-section'
4636     When using DWARF Version 4 or higher, type DIEs can be put into
4637     their own `.debug_types' section instead of making them part of the
4638     `.debug_info' section.  It is more efficient to put them in a
4639     separate comdat sections since the linker can then remove
4640     duplicates.  But not all DWARF consumers support `.debug_types'
4641     sections yet and on some objects `.debug_types' produces larger
4642     instead of smaller debugging information.
4643
4644`-gstabs+'
4645     Produce debugging information in stabs format (if that is
4646     supported), using GNU extensions understood only by the GNU
4647     debugger (GDB).  The use of these extensions is likely to make
4648     other debuggers crash or refuse to read the program.
4649
4650`-gcoff'
4651     Produce debugging information in COFF format (if that is
4652     supported).  This is the format used by SDB on most System V
4653     systems prior to System V Release 4.
4654
4655`-gxcoff'
4656     Produce debugging information in XCOFF format (if that is
4657     supported).  This is the format used by the DBX debugger on IBM
4658     RS/6000 systems.
4659
4660`-gxcoff+'
4661     Produce debugging information in XCOFF format (if that is
4662     supported), using GNU extensions understood only by the GNU
4663     debugger (GDB).  The use of these extensions is likely to make
4664     other debuggers crash or refuse to read the program, and may cause
4665     assemblers other than the GNU assembler (GAS) to fail with an
4666     error.
4667
4668`-gdwarf-VERSION'
4669     Produce debugging information in DWARF format (if that is
4670     supported).  The value of VERSION may be either 2, 3 or 4; the
4671     default version for most targets is 4.
4672
4673     Note that with DWARF Version 2, some ports require and always use
4674     some non-conflicting DWARF 3 extensions in the unwind tables.
4675
4676     Version 4 may require GDB 7.0 and `-fvar-tracking-assignments' for
4677     maximum benefit.
4678
4679`-grecord-gcc-switches'
4680     This switch causes the command-line options used to invoke the
4681     compiler that may affect code generation to be appended to the
4682     DW_AT_producer attribute in DWARF debugging information.  The
4683     options are concatenated with spaces separating them from each
4684     other and from the compiler version.  See also
4685     `-frecord-gcc-switches' for another way of storing compiler
4686     options into the object file.  This is the default.
4687
4688`-gno-record-gcc-switches'
4689     Disallow appending command-line options to the DW_AT_producer
4690     attribute in DWARF debugging information.
4691
4692`-gstrict-dwarf'
4693     Disallow using extensions of later DWARF standard version than
4694     selected with `-gdwarf-VERSION'.  On most targets using
4695     non-conflicting DWARF extensions from later standard versions is
4696     allowed.
4697
4698`-gno-strict-dwarf'
4699     Allow using extensions of later DWARF standard version than
4700     selected with `-gdwarf-VERSION'.
4701
4702`-gvms'
4703     Produce debugging information in Alpha/VMS debug format (if that is
4704     supported).  This is the format used by DEBUG on Alpha/VMS systems.
4705
4706`-gLEVEL'
4707`-ggdbLEVEL'
4708`-gstabsLEVEL'
4709`-gcoffLEVEL'
4710`-gxcoffLEVEL'
4711`-gvmsLEVEL'
4712     Request debugging information and also use LEVEL to specify how
4713     much information.  The default level is 2.
4714
4715     Level 0 produces no debug information at all.  Thus, `-g0' negates
4716     `-g'.
4717
4718     Level 1 produces minimal information, enough for making backtraces
4719     in parts of the program that you don't plan to debug.  This
4720     includes descriptions of functions and external variables, but no
4721     information about local variables and no line numbers.
4722
4723     Level 3 includes extra information, such as all the macro
4724     definitions present in the program.  Some debuggers support macro
4725     expansion when you use `-g3'.
4726
4727     `-gdwarf-2' does not accept a concatenated debug level, because
4728     GCC used to support an option `-gdwarf' that meant to generate
4729     debug information in version 1 of the DWARF format (which is very
4730     different from version 2), and it would have been too confusing.
4731     That debug format is long obsolete, but the option cannot be
4732     changed now.  Instead use an additional `-gLEVEL' option to change
4733     the debug level for DWARF.
4734
4735`-gtoggle'
4736     Turn off generation of debug info, if leaving out this option
4737     generates it, or turn it on at level 2 otherwise.  The position of
4738     this argument in the command line does not matter; it takes effect
4739     after all other options are processed, and it does so only once,
4740     no matter how many times it is given.  This is mainly intended to
4741     be used with `-fcompare-debug'.
4742
4743`-fsanitize=address'
4744     Enable AddressSanitizer, a fast memory error detector.  Memory
4745     access instructions will be instrumented to detect out-of-bounds
4746     and use-after-free bugs.  See
4747     `http://code.google.com/p/address-sanitizer/' for more details.
4748
4749`-fsanitize=thread'
4750     Enable ThreadSanitizer, a fast data race detector.  Memory access
4751     instructions will be instrumented to detect data race bugs.  See
4752     `http://code.google.com/p/data-race-test/wiki/ThreadSanitizer' for
4753     more details.
4754
4755`-fdump-final-insns[=FILE]'
4756     Dump the final internal representation (RTL) to FILE.  If the
4757     optional argument is omitted (or if FILE is `.'), the name of the
4758     dump file is determined by appending `.gkd' to the compilation
4759     output file name.
4760
4761`-fcompare-debug[=OPTS]'
4762     If no error occurs during compilation, run the compiler a second
4763     time, adding OPTS and `-fcompare-debug-second' to the arguments
4764     passed to the second compilation.  Dump the final internal
4765     representation in both compilations, and print an error if they
4766     differ.
4767
4768     If the equal sign is omitted, the default `-gtoggle' is used.
4769
4770     The environment variable `GCC_COMPARE_DEBUG', if defined, non-empty
4771     and nonzero, implicitly enables `-fcompare-debug'.  If
4772     `GCC_COMPARE_DEBUG' is defined to a string starting with a dash,
4773     then it is used for OPTS, otherwise the default `-gtoggle' is used.
4774
4775     `-fcompare-debug=', with the equal sign but without OPTS, is
4776     equivalent to `-fno-compare-debug', which disables the dumping of
4777     the final representation and the second compilation, preventing
4778     even `GCC_COMPARE_DEBUG' from taking effect.
4779
4780     To verify full coverage during `-fcompare-debug' testing, set
4781     `GCC_COMPARE_DEBUG' to say `-fcompare-debug-not-overridden', which
4782     GCC rejects as an invalid option in any actual compilation (rather
4783     than preprocessing, assembly or linking).  To get just a warning,
4784     setting `GCC_COMPARE_DEBUG' to `-w%n-fcompare-debug not
4785     overridden' will do.
4786
4787`-fcompare-debug-second'
4788     This option is implicitly passed to the compiler for the second
4789     compilation requested by `-fcompare-debug', along with options to
4790     silence warnings, and omitting other options that would cause
4791     side-effect compiler outputs to files or to the standard output.
4792     Dump files and preserved temporary files are renamed so as to
4793     contain the `.gk' additional extension during the second
4794     compilation, to avoid overwriting those generated by the first.
4795
4796     When this option is passed to the compiler driver, it causes the
4797     _first_ compilation to be skipped, which makes it useful for little
4798     other than debugging the compiler proper.
4799
4800`-feliminate-dwarf2-dups'
4801     Compress DWARF 2 debugging information by eliminating duplicated
4802     information about each symbol.  This option only makes sense when
4803     generating DWARF 2 debugging information with `-gdwarf-2'.
4804
4805`-femit-struct-debug-baseonly'
4806     Emit debug information for struct-like types only when the base
4807     name of the compilation source file matches the base name of file
4808     in which the struct is defined.
4809
4810     This option substantially reduces the size of debugging
4811     information, but at significant potential loss in type information
4812     to the debugger.  See `-femit-struct-debug-reduced' for a less
4813     aggressive option.  See `-femit-struct-debug-detailed' for more
4814     detailed control.
4815
4816     This option works only with DWARF 2.
4817
4818`-femit-struct-debug-reduced'
4819     Emit debug information for struct-like types only when the base
4820     name of the compilation source file matches the base name of file
4821     in which the type is defined, unless the struct is a template or
4822     defined in a system header.
4823
4824     This option significantly reduces the size of debugging
4825     information, with some potential loss in type information to the
4826     debugger.  See `-femit-struct-debug-baseonly' for a more
4827     aggressive option.  See `-femit-struct-debug-detailed' for more
4828     detailed control.
4829
4830     This option works only with DWARF 2.
4831
4832`-femit-struct-debug-detailed[=SPEC-LIST]'
4833     Specify the struct-like types for which the compiler generates
4834     debug information.  The intent is to reduce duplicate struct debug
4835     information between different object files within the same program.
4836
4837     This option is a detailed version of `-femit-struct-debug-reduced'
4838     and `-femit-struct-debug-baseonly', which serves for most needs.
4839
4840     A specification has the syntax
4841     [`dir:'|`ind:'][`ord:'|`gen:'](`any'|`sys'|`base'|`none')
4842
4843     The optional first word limits the specification to structs that
4844     are used directly (`dir:') or used indirectly (`ind:').  A struct
4845     type is used directly when it is the type of a variable, member.
4846     Indirect uses arise through pointers to structs.  That is, when
4847     use of an incomplete struct is valid, the use is indirect.  An
4848     example is `struct one direct; struct two * indirect;'.
4849
4850     The optional second word limits the specification to ordinary
4851     structs (`ord:') or generic structs (`gen:').  Generic structs are
4852     a bit complicated to explain.  For C++, these are non-explicit
4853     specializations of template classes, or non-template classes
4854     within the above.  Other programming languages have generics, but
4855     `-femit-struct-debug-detailed' does not yet implement them.
4856
4857     The third word specifies the source files for those structs for
4858     which the compiler should emit debug information.  The values
4859     `none' and `any' have the normal meaning.  The value `base' means
4860     that the base of name of the file in which the type declaration
4861     appears must match the base of the name of the main compilation
4862     file.  In practice, this means that when compiling `foo.c', debug
4863     information is generated for types declared in that file and
4864     `foo.h', but not other header files.  The value `sys' means those
4865     types satisfying `base' or declared in system or compiler headers.
4866
4867     You may need to experiment to determine the best settings for your
4868     application.
4869
4870     The default is `-femit-struct-debug-detailed=all'.
4871
4872     This option works only with DWARF 2.
4873
4874`-fno-merge-debug-strings'
4875     Direct the linker to not merge together strings in the debugging
4876     information that are identical in different object files.  Merging
4877     is not supported by all assemblers or linkers.  Merging decreases
4878     the size of the debug information in the output file at the cost
4879     of increasing link processing time.  Merging is enabled by default.
4880
4881`-fdebug-prefix-map=OLD=NEW'
4882     When compiling files in directory `OLD', record debugging
4883     information describing them as in `NEW' instead.
4884
4885`-fno-dwarf2-cfi-asm'
4886     Emit DWARF 2 unwind info as compiler generated `.eh_frame' section
4887     instead of using GAS `.cfi_*' directives.
4888
4889`-p'
4890     Generate extra code to write profile information suitable for the
4891     analysis program `prof'.  You must use this option when compiling
4892     the source files you want data about, and you must also use it when
4893     linking.
4894
4895`-pg'
4896     Generate extra code to write profile information suitable for the
4897     analysis program `gprof'.  You must use this option when compiling
4898     the source files you want data about, and you must also use it when
4899     linking.
4900
4901`-Q'
4902     Makes the compiler print out each function name as it is compiled,
4903     and print some statistics about each pass when it finishes.
4904
4905`-ftime-report'
4906     Makes the compiler print some statistics about the time consumed
4907     by each pass when it finishes.
4908
4909`-fmem-report'
4910     Makes the compiler print some statistics about permanent memory
4911     allocation when it finishes.
4912
4913`-fmem-report-wpa'
4914     Makes the compiler print some statistics about permanent memory
4915     allocation for the WPA phase only.
4916
4917`-fpre-ipa-mem-report'
4918
4919`-fpost-ipa-mem-report'
4920     Makes the compiler print some statistics about permanent memory
4921     allocation before or after interprocedural optimization.
4922
4923`-fprofile-report'
4924     Makes the compiler print some statistics about consistency of the
4925     (estimated) profile and effect of individual passes.
4926
4927`-fstack-usage'
4928     Makes the compiler output stack usage information for the program,
4929     on a per-function basis.  The filename for the dump is made by
4930     appending `.su' to the AUXNAME.  AUXNAME is generated from the
4931     name of the output file, if explicitly specified and it is not an
4932     executable, otherwise it is the basename of the source file.  An
4933     entry is made up of three fields:
4934
4935        * The name of the function.
4936
4937        * A number of bytes.
4938
4939        * One or more qualifiers: `static', `dynamic', `bounded'.
4940
4941     The qualifier `static' means that the function manipulates the
4942     stack statically: a fixed number of bytes are allocated for the
4943     frame on function entry and released on function exit; no stack
4944     adjustments are otherwise made in the function.  The second field
4945     is this fixed number of bytes.
4946
4947     The qualifier `dynamic' means that the function manipulates the
4948     stack dynamically: in addition to the static allocation described
4949     above, stack adjustments are made in the body of the function, for
4950     example to push/pop arguments around function calls.  If the
4951     qualifier `bounded' is also present, the amount of these
4952     adjustments is bounded at compile time and the second field is an
4953     upper bound of the total amount of stack used by the function.  If
4954     it is not present, the amount of these adjustments is not bounded
4955     at compile time and the second field only represents the bounded
4956     part.
4957
4958`-fprofile-arcs'
4959     Add code so that program flow "arcs" are instrumented.  During
4960     execution the program records how many times each branch and call
4961     is executed and how many times it is taken or returns.  When the
4962     compiled program exits it saves this data to a file called
4963     `AUXNAME.gcda' for each source file.  The data may be used for
4964     profile-directed optimizations (`-fbranch-probabilities'), or for
4965     test coverage analysis (`-ftest-coverage').  Each object file's
4966     AUXNAME is generated from the name of the output file, if
4967     explicitly specified and it is not the final executable, otherwise
4968     it is the basename of the source file.  In both cases any suffix
4969     is removed (e.g. `foo.gcda' for input file `dir/foo.c', or
4970     `dir/foo.gcda' for output file specified as `-o dir/foo.o').
4971     *Note Cross-profiling::.
4972
4973`--coverage'
4974     This option is used to compile and link code instrumented for
4975     coverage analysis.  The option is a synonym for `-fprofile-arcs'
4976     `-ftest-coverage' (when compiling) and `-lgcov' (when linking).
4977     See the documentation for those options for more details.
4978
4979        * Compile the source files with `-fprofile-arcs' plus
4980          optimization and code generation options.  For test coverage
4981          analysis, use the additional `-ftest-coverage' option.  You
4982          do not need to profile every source file in a program.
4983
4984        * Link your object files with `-lgcov' or `-fprofile-arcs' (the
4985          latter implies the former).
4986
4987        * Run the program on a representative workload to generate the
4988          arc profile information.  This may be repeated any number of
4989          times.  You can run concurrent instances of your program, and
4990          provided that the file system supports locking, the data
4991          files will be correctly updated.  Also `fork' calls are
4992          detected and correctly handled (double counting will not
4993          happen).
4994
4995        * For profile-directed optimizations, compile the source files
4996          again with the same optimization and code generation options
4997          plus `-fbranch-probabilities' (*note Options that Control
4998          Optimization: Optimize Options.).
4999
5000        * For test coverage analysis, use `gcov' to produce human
5001          readable information from the `.gcno' and `.gcda' files.
5002          Refer to the `gcov' documentation for further information.
5003
5004
5005     With `-fprofile-arcs', for each function of your program GCC
5006     creates a program flow graph, then finds a spanning tree for the
5007     graph.  Only arcs that are not on the spanning tree have to be
5008     instrumented: the compiler adds code to count the number of times
5009     that these arcs are executed.  When an arc is the only exit or
5010     only entrance to a block, the instrumentation code can be added to
5011     the block; otherwise, a new basic block must be created to hold
5012     the instrumentation code.
5013
5014`-ftest-coverage'
5015     Produce a notes file that the `gcov' code-coverage utility (*note
5016     `gcov'--a Test Coverage Program: Gcov.) can use to show program
5017     coverage.  Each source file's note file is called `AUXNAME.gcno'.
5018     Refer to the `-fprofile-arcs' option above for a description of
5019     AUXNAME and instructions on how to generate test coverage data.
5020     Coverage data matches the source files more closely if you do not
5021     optimize.
5022
5023`-fdbg-cnt-list'
5024     Print the name and the counter upper bound for all debug counters.
5025
5026`-fdbg-cnt=COUNTER-VALUE-LIST'
5027     Set the internal debug counter upper bound.  COUNTER-VALUE-LIST is
5028     a comma-separated list of NAME:VALUE pairs which sets the upper
5029     bound of each debug counter NAME to VALUE.  All debug counters
5030     have the initial upper bound of `UINT_MAX'; thus `dbg_cnt()'
5031     returns true always unless the upper bound is set by this option.
5032     For example, with `-fdbg-cnt=dce:10,tail_call:0', `dbg_cnt(dce)'
5033     returns true only for first 10 invocations.
5034
5035`-fenable-KIND-PASS'
5036`-fdisable-KIND-PASS=RANGE-LIST'
5037     This is a set of options that are used to explicitly disable/enable
5038     optimization passes.  These options are intended for use for
5039     debugging GCC.  Compiler users should use regular options for
5040     enabling/disabling passes instead.
5041
5042    `-fdisable-ipa-PASS'
5043          Disable IPA pass PASS. PASS is the pass name.  If the same
5044          pass is statically invoked in the compiler multiple times,
5045          the pass name should be appended with a sequential number
5046          starting from 1.
5047
5048    `-fdisable-rtl-PASS'
5049    `-fdisable-rtl-PASS=RANGE-LIST'
5050          Disable RTL pass PASS.  PASS is the pass name.  If the same
5051          pass is statically invoked in the compiler multiple times,
5052          the pass name should be appended with a sequential number
5053          starting from 1.  RANGE-LIST is a comma-separated list of
5054          function ranges or assembler names.  Each range is a number
5055          pair separated by a colon.  The range is inclusive in both
5056          ends.  If the range is trivial, the number pair can be
5057          simplified as a single number.  If the function's call graph
5058          node's UID falls within one of the specified ranges, the PASS
5059          is disabled for that function.  The UID is shown in the
5060          function header of a dump file, and the pass names can be
5061          dumped by using option `-fdump-passes'.
5062
5063    `-fdisable-tree-PASS'
5064    `-fdisable-tree-PASS=RANGE-LIST'
5065          Disable tree pass PASS.  See `-fdisable-rtl' for the
5066          description of option arguments.
5067
5068    `-fenable-ipa-PASS'
5069          Enable IPA pass PASS.  PASS is the pass name.  If the same
5070          pass is statically invoked in the compiler multiple times,
5071          the pass name should be appended with a sequential number
5072          starting from 1.
5073
5074    `-fenable-rtl-PASS'
5075    `-fenable-rtl-PASS=RANGE-LIST'
5076          Enable RTL pass PASS.  See `-fdisable-rtl' for option argument
5077          description and examples.
5078
5079    `-fenable-tree-PASS'
5080    `-fenable-tree-PASS=RANGE-LIST'
5081          Enable tree pass PASS.  See `-fdisable-rtl' for the
5082          description of option arguments.
5083
5084
5085     Here are some examples showing uses of these options.
5086
5087
5088          # disable ccp1 for all functions
5089             -fdisable-tree-ccp1
5090          # disable complete unroll for function whose cgraph node uid is 1
5091             -fenable-tree-cunroll=1
5092          # disable gcse2 for functions at the following ranges [1,1],
5093          # [300,400], and [400,1000]
5094          # disable gcse2 for functions foo and foo2
5095             -fdisable-rtl-gcse2=foo,foo2
5096          # disable early inlining
5097             -fdisable-tree-einline
5098          # disable ipa inlining
5099             -fdisable-ipa-inline
5100          # enable tree full unroll
5101             -fenable-tree-unroll
5102
5103`-dLETTERS'
5104`-fdump-rtl-PASS'
5105`-fdump-rtl-PASS=FILENAME'
5106     Says to make debugging dumps during compilation at times specified
5107     by LETTERS.  This is used for debugging the RTL-based passes of the
5108     compiler.  The file names for most of the dumps are made by
5109     appending a pass number and a word to the DUMPNAME, and the files
5110     are created in the directory of the output file. In case of
5111     `=FILENAME' option, the dump is output on the given file instead
5112     of the pass numbered dump files. Note that the pass number is
5113     computed statically as passes get registered into the pass manager.
5114     Thus the numbering is not related to the dynamic order of
5115     execution of passes.  In particular, a pass installed by a plugin
5116     could have a number over 200 even if it executed quite early.
5117     DUMPNAME is generated from the name of the output file, if
5118     explicitly specified and it is not an executable, otherwise it is
5119     the basename of the source file. These switches may have different
5120     effects when `-E' is used for preprocessing.
5121
5122     Debug dumps can be enabled with a `-fdump-rtl' switch or some `-d'
5123     option LETTERS.  Here are the possible letters for use in PASS and
5124     LETTERS, and their meanings:
5125
5126    `-fdump-rtl-alignments'
5127          Dump after branch alignments have been computed.
5128
5129    `-fdump-rtl-asmcons'
5130          Dump after fixing rtl statements that have unsatisfied in/out
5131          constraints.
5132
5133    `-fdump-rtl-auto_inc_dec'
5134          Dump after auto-inc-dec discovery.  This pass is only run on
5135          architectures that have auto inc or auto dec instructions.
5136
5137    `-fdump-rtl-barriers'
5138          Dump after cleaning up the barrier instructions.
5139
5140    `-fdump-rtl-bbpart'
5141          Dump after partitioning hot and cold basic blocks.
5142
5143    `-fdump-rtl-bbro'
5144          Dump after block reordering.
5145
5146    `-fdump-rtl-btl1'
5147    `-fdump-rtl-btl2'
5148          `-fdump-rtl-btl1' and `-fdump-rtl-btl2' enable dumping after
5149          the two branch target load optimization passes.
5150
5151    `-fdump-rtl-bypass'
5152          Dump after jump bypassing and control flow optimizations.
5153
5154    `-fdump-rtl-combine'
5155          Dump after the RTL instruction combination pass.
5156
5157    `-fdump-rtl-compgotos'
5158          Dump after duplicating the computed gotos.
5159
5160    `-fdump-rtl-ce1'
5161    `-fdump-rtl-ce2'
5162    `-fdump-rtl-ce3'
5163          `-fdump-rtl-ce1', `-fdump-rtl-ce2', and `-fdump-rtl-ce3'
5164          enable dumping after the three if conversion passes.
5165
5166    `-fdump-rtl-cprop_hardreg'
5167          Dump after hard register copy propagation.
5168
5169    `-fdump-rtl-csa'
5170          Dump after combining stack adjustments.
5171
5172    `-fdump-rtl-cse1'
5173    `-fdump-rtl-cse2'
5174          `-fdump-rtl-cse1' and `-fdump-rtl-cse2' enable dumping after
5175          the two common subexpression elimination passes.
5176
5177    `-fdump-rtl-dce'
5178          Dump after the standalone dead code elimination passes.
5179
5180    `-fdump-rtl-dbr'
5181          Dump after delayed branch scheduling.
5182
5183    `-fdump-rtl-dce1'
5184    `-fdump-rtl-dce2'
5185          `-fdump-rtl-dce1' and `-fdump-rtl-dce2' enable dumping after
5186          the two dead store elimination passes.
5187
5188    `-fdump-rtl-eh'
5189          Dump after finalization of EH handling code.
5190
5191    `-fdump-rtl-eh_ranges'
5192          Dump after conversion of EH handling range regions.
5193
5194    `-fdump-rtl-expand'
5195          Dump after RTL generation.
5196
5197    `-fdump-rtl-fwprop1'
5198    `-fdump-rtl-fwprop2'
5199          `-fdump-rtl-fwprop1' and `-fdump-rtl-fwprop2' enable dumping
5200          after the two forward propagation passes.
5201
5202    `-fdump-rtl-gcse1'
5203    `-fdump-rtl-gcse2'
5204          `-fdump-rtl-gcse1' and `-fdump-rtl-gcse2' enable dumping
5205          after global common subexpression elimination.
5206
5207    `-fdump-rtl-init-regs'
5208          Dump after the initialization of the registers.
5209
5210    `-fdump-rtl-initvals'
5211          Dump after the computation of the initial value sets.
5212
5213    `-fdump-rtl-into_cfglayout'
5214          Dump after converting to cfglayout mode.
5215
5216    `-fdump-rtl-ira'
5217          Dump after iterated register allocation.
5218
5219    `-fdump-rtl-jump'
5220          Dump after the second jump optimization.
5221
5222    `-fdump-rtl-loop2'
5223          `-fdump-rtl-loop2' enables dumping after the rtl loop
5224          optimization passes.
5225
5226    `-fdump-rtl-mach'
5227          Dump after performing the machine dependent reorganization
5228          pass, if that pass exists.
5229
5230    `-fdump-rtl-mode_sw'
5231          Dump after removing redundant mode switches.
5232
5233    `-fdump-rtl-rnreg'
5234          Dump after register renumbering.
5235
5236    `-fdump-rtl-outof_cfglayout'
5237          Dump after converting from cfglayout mode.
5238
5239    `-fdump-rtl-peephole2'
5240          Dump after the peephole pass.
5241
5242    `-fdump-rtl-postreload'
5243          Dump after post-reload optimizations.
5244
5245    `-fdump-rtl-pro_and_epilogue'
5246          Dump after generating the function prologues and epilogues.
5247
5248    `-fdump-rtl-regmove'
5249          Dump after the register move pass.
5250
5251    `-fdump-rtl-sched1'
5252    `-fdump-rtl-sched2'
5253          `-fdump-rtl-sched1' and `-fdump-rtl-sched2' enable dumping
5254          after the basic block scheduling passes.
5255
5256    `-fdump-rtl-see'
5257          Dump after sign extension elimination.
5258
5259    `-fdump-rtl-seqabstr'
5260          Dump after common sequence discovery.
5261
5262    `-fdump-rtl-shorten'
5263          Dump after shortening branches.
5264
5265    `-fdump-rtl-sibling'
5266          Dump after sibling call optimizations.
5267
5268    `-fdump-rtl-split1'
5269    `-fdump-rtl-split2'
5270    `-fdump-rtl-split3'
5271    `-fdump-rtl-split4'
5272    `-fdump-rtl-split5'
5273          `-fdump-rtl-split1', `-fdump-rtl-split2',
5274          `-fdump-rtl-split3', `-fdump-rtl-split4' and
5275          `-fdump-rtl-split5' enable dumping after five rounds of
5276          instruction splitting.
5277
5278    `-fdump-rtl-sms'
5279          Dump after modulo scheduling.  This pass is only run on some
5280          architectures.
5281
5282    `-fdump-rtl-stack'
5283          Dump after conversion from GCC's "flat register file"
5284          registers to the x87's stack-like registers.  This pass is
5285          only run on x86 variants.
5286
5287    `-fdump-rtl-subreg1'
5288    `-fdump-rtl-subreg2'
5289          `-fdump-rtl-subreg1' and `-fdump-rtl-subreg2' enable dumping
5290          after the two subreg expansion passes.
5291
5292    `-fdump-rtl-unshare'
5293          Dump after all rtl has been unshared.
5294
5295    `-fdump-rtl-vartrack'
5296          Dump after variable tracking.
5297
5298    `-fdump-rtl-vregs'
5299          Dump after converting virtual registers to hard registers.
5300
5301    `-fdump-rtl-web'
5302          Dump after live range splitting.
5303
5304    `-fdump-rtl-regclass'
5305    `-fdump-rtl-subregs_of_mode_init'
5306    `-fdump-rtl-subregs_of_mode_finish'
5307    `-fdump-rtl-dfinit'
5308    `-fdump-rtl-dfinish'
5309          These dumps are defined but always produce empty files.
5310
5311    `-da'
5312    `-fdump-rtl-all'
5313          Produce all the dumps listed above.
5314
5315    `-dA'
5316          Annotate the assembler output with miscellaneous debugging
5317          information.
5318
5319    `-dD'
5320          Dump all macro definitions, at the end of preprocessing, in
5321          addition to normal output.
5322
5323    `-dH'
5324          Produce a core dump whenever an error occurs.
5325
5326    `-dp'
5327          Annotate the assembler output with a comment indicating which
5328          pattern and alternative is used.  The length of each
5329          instruction is also printed.
5330
5331    `-dP'
5332          Dump the RTL in the assembler output as a comment before each
5333          instruction.  Also turns on `-dp' annotation.
5334
5335    `-dx'
5336          Just generate RTL for a function instead of compiling it.
5337          Usually used with `-fdump-rtl-expand'.
5338
5339`-fdump-noaddr'
5340     When doing debugging dumps, suppress address output.  This makes
5341     it more feasible to use diff on debugging dumps for compiler
5342     invocations with different compiler binaries and/or different text
5343     / bss / data / heap / stack / dso start locations.
5344
5345`-fdump-unnumbered'
5346     When doing debugging dumps, suppress instruction numbers and
5347     address output.  This makes it more feasible to use diff on
5348     debugging dumps for compiler invocations with different options,
5349     in particular with and without `-g'.
5350
5351`-fdump-unnumbered-links'
5352     When doing debugging dumps (see `-d' option above), suppress
5353     instruction numbers for the links to the previous and next
5354     instructions in a sequence.
5355
5356`-fdump-translation-unit (C++ only)'
5357`-fdump-translation-unit-OPTIONS (C++ only)'
5358     Dump a representation of the tree structure for the entire
5359     translation unit to a file.  The file name is made by appending
5360     `.tu' to the source file name, and the file is created in the same
5361     directory as the output file.  If the `-OPTIONS' form is used,
5362     OPTIONS controls the details of the dump as described for the
5363     `-fdump-tree' options.
5364
5365`-fdump-class-hierarchy (C++ only)'
5366`-fdump-class-hierarchy-OPTIONS (C++ only)'
5367     Dump a representation of each class's hierarchy and virtual
5368     function table layout to a file.  The file name is made by
5369     appending `.class' to the source file name, and the file is
5370     created in the same directory as the output file.  If the
5371     `-OPTIONS' form is used, OPTIONS controls the details of the dump
5372     as described for the `-fdump-tree' options.
5373
5374`-fdump-ipa-SWITCH'
5375     Control the dumping at various stages of inter-procedural analysis
5376     language tree to a file.  The file name is generated by appending a
5377     switch specific suffix to the source file name, and the file is
5378     created in the same directory as the output file.  The following
5379     dumps are possible:
5380
5381    `all'
5382          Enables all inter-procedural analysis dumps.
5383
5384    `cgraph'
5385          Dumps information about call-graph optimization, unused
5386          function removal, and inlining decisions.
5387
5388    `inline'
5389          Dump after function inlining.
5390
5391
5392`-fdump-passes'
5393     Dump the list of optimization passes that are turned on and off by
5394     the current command-line options.
5395
5396`-fdump-statistics-OPTION'
5397     Enable and control dumping of pass statistics in a separate file.
5398     The file name is generated by appending a suffix ending in
5399     `.statistics' to the source file name, and the file is created in
5400     the same directory as the output file.  If the `-OPTION' form is
5401     used, `-stats' causes counters to be summed over the whole
5402     compilation unit while `-details' dumps every event as the passes
5403     generate them.  The default with no option is to sum counters for
5404     each function compiled.
5405
5406`-fdump-tree-SWITCH'
5407`-fdump-tree-SWITCH-OPTIONS'
5408`-fdump-tree-SWITCH-OPTIONS=FILENAME'
5409     Control the dumping at various stages of processing the
5410     intermediate language tree to a file.  The file name is generated
5411     by appending a switch-specific suffix to the source file name, and
5412     the file is created in the same directory as the output file. In
5413     case of `=FILENAME' option, the dump is output on the given file
5414     instead of the auto named dump files.  If the `-OPTIONS' form is
5415     used, OPTIONS is a list of `-' separated options which control the
5416     details of the dump.  Not all options are applicable to all dumps;
5417     those that are not meaningful are ignored.  The following options
5418     are available
5419
5420    `address'
5421          Print the address of each node.  Usually this is not
5422          meaningful as it changes according to the environment and
5423          source file.  Its primary use is for tying up a dump file
5424          with a debug environment.
5425
5426    `asmname'
5427          If `DECL_ASSEMBLER_NAME' has been set for a given decl, use
5428          that in the dump instead of `DECL_NAME'.  Its primary use is
5429          ease of use working backward from mangled names in the
5430          assembly file.
5431
5432    `slim'
5433          When dumping front-end intermediate representations, inhibit
5434          dumping of members of a scope or body of a function merely
5435          because that scope has been reached.  Only dump such items
5436          when they are directly reachable by some other path.
5437
5438          When dumping pretty-printed trees, this option inhibits
5439          dumping the bodies of control structures.
5440
5441          When dumping RTL, print the RTL in slim (condensed) form
5442          instead of the default LISP-like representation.
5443
5444    `raw'
5445          Print a raw representation of the tree.  By default, trees are
5446          pretty-printed into a C-like representation.
5447
5448    `details'
5449          Enable more detailed dumps (not honored by every dump
5450          option). Also include information from the optimization
5451          passes.
5452
5453    `stats'
5454          Enable dumping various statistics about the pass (not honored
5455          by every dump option).
5456
5457    `blocks'
5458          Enable showing basic block boundaries (disabled in raw dumps).
5459
5460    `graph'
5461          For each of the other indicated dump files
5462          (`-fdump-rtl-PASS'), dump a representation of the control
5463          flow graph suitable for viewing with GraphViz to
5464          `FILE.PASSID.PASS.dot'.  Each function in the file is
5465          pretty-printed as a subgraph, so that GraphViz can render them
5466          all in a single plot.
5467
5468          This option currently only works for RTL dumps, and the RTL
5469          is always dumped in slim form.
5470
5471    `vops'
5472          Enable showing virtual operands for every statement.
5473
5474    `lineno'
5475          Enable showing line numbers for statements.
5476
5477    `uid'
5478          Enable showing the unique ID (`DECL_UID') for each variable.
5479
5480    `verbose'
5481          Enable showing the tree dump for each statement.
5482
5483    `eh'
5484          Enable showing the EH region number holding each statement.
5485
5486    `scev'
5487          Enable showing scalar evolution analysis details.
5488
5489    `optimized'
5490          Enable showing optimization information (only available in
5491          certain passes).
5492
5493    `missed'
5494          Enable showing missed optimization information (only
5495          available in certain passes).
5496
5497    `notes'
5498          Enable other detailed optimization information (only
5499          available in certain passes).
5500
5501    `=FILENAME'
5502          Instead of an auto named dump file, output into the given file
5503          name. The file names `stdout' and `stderr' are treated
5504          specially and are considered already open standard streams.
5505          For example,
5506
5507               gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
5508                    -fdump-tree-pre=stderr file.c
5509
5510          outputs vectorizer dump into `foo.dump', while the PRE dump is
5511          output on to `stderr'. If two conflicting dump filenames are
5512          given for the same pass, then the latter option overrides the
5513          earlier one.
5514
5515    `all'
5516          Turn on all options, except `raw', `slim', `verbose' and
5517          `lineno'.
5518
5519    `optall'
5520          Turn on all optimization options, i.e., `optimized',
5521          `missed', and `note'.
5522
5523     The following tree dumps are possible:
5524    `original'
5525          Dump before any tree based optimization, to `FILE.original'.
5526
5527    `optimized'
5528          Dump after all tree based optimization, to `FILE.optimized'.
5529
5530    `gimple'
5531          Dump each function before and after the gimplification pass
5532          to a file.  The file name is made by appending `.gimple' to
5533          the source file name.
5534
5535    `cfg'
5536          Dump the control flow graph of each function to a file.  The
5537          file name is made by appending `.cfg' to the source file name.
5538
5539    `ch'
5540          Dump each function after copying loop headers.  The file name
5541          is made by appending `.ch' to the source file name.
5542
5543    `ssa'
5544          Dump SSA related information to a file.  The file name is
5545          made by appending `.ssa' to the source file name.
5546
5547    `alias'
5548          Dump aliasing information for each function.  The file name
5549          is made by appending `.alias' to the source file name.
5550
5551    `ccp'
5552          Dump each function after CCP.  The file name is made by
5553          appending `.ccp' to the source file name.
5554
5555    `storeccp'
5556          Dump each function after STORE-CCP.  The file name is made by
5557          appending `.storeccp' to the source file name.
5558
5559    `pre'
5560          Dump trees after partial redundancy elimination.  The file
5561          name is made by appending `.pre' to the source file name.
5562
5563    `fre'
5564          Dump trees after full redundancy elimination.  The file name
5565          is made by appending `.fre' to the source file name.
5566
5567    `copyprop'
5568          Dump trees after copy propagation.  The file name is made by
5569          appending `.copyprop' to the source file name.
5570
5571    `store_copyprop'
5572          Dump trees after store copy-propagation.  The file name is
5573          made by appending `.store_copyprop' to the source file name.
5574
5575    `dce'
5576          Dump each function after dead code elimination.  The file
5577          name is made by appending `.dce' to the source file name.
5578
5579    `mudflap'
5580          Dump each function after adding mudflap instrumentation.  The
5581          file name is made by appending `.mudflap' to the source file
5582          name.
5583
5584    `sra'
5585          Dump each function after performing scalar replacement of
5586          aggregates.  The file name is made by appending `.sra' to the
5587          source file name.
5588
5589    `sink'
5590          Dump each function after performing code sinking.  The file
5591          name is made by appending `.sink' to the source file name.
5592
5593    `dom'
5594          Dump each function after applying dominator tree
5595          optimizations.  The file name is made by appending `.dom' to
5596          the source file name.
5597
5598    `dse'
5599          Dump each function after applying dead store elimination.
5600          The file name is made by appending `.dse' to the source file
5601          name.
5602
5603    `phiopt'
5604          Dump each function after optimizing PHI nodes into
5605          straightline code.  The file name is made by appending
5606          `.phiopt' to the source file name.
5607
5608    `forwprop'
5609          Dump each function after forward propagating single use
5610          variables.  The file name is made by appending `.forwprop' to
5611          the source file name.
5612
5613    `copyrename'
5614          Dump each function after applying the copy rename
5615          optimization.  The file name is made by appending
5616          `.copyrename' to the source file name.
5617
5618    `nrv'
5619          Dump each function after applying the named return value
5620          optimization on generic trees.  The file name is made by
5621          appending `.nrv' to the source file name.
5622
5623    `vect'
5624          Dump each function after applying vectorization of loops.
5625          The file name is made by appending `.vect' to the source file
5626          name.
5627
5628    `slp'
5629          Dump each function after applying vectorization of basic
5630          blocks.  The file name is made by appending `.slp' to the
5631          source file name.
5632
5633    `vrp'
5634          Dump each function after Value Range Propagation (VRP).  The
5635          file name is made by appending `.vrp' to the source file name.
5636
5637    `all'
5638          Enable all the available tree dumps with the flags provided
5639          in this option.
5640
5641`-fopt-info'
5642`-fopt-info-OPTIONS'
5643`-fopt-info-OPTIONS=FILENAME'
5644     Controls optimization dumps from various optimization passes. If
5645     the `-OPTIONS' form is used, OPTIONS is a list of `-' separated
5646     options to select the dump details and optimizations.  If OPTIONS
5647     is not specified, it defaults to `all' for details and `optall'
5648     for optimization groups. If the FILENAME is not specified, it
5649     defaults to `stderr'. Note that the output FILENAME will be
5650     overwritten in case of multiple translation units. If a combined
5651     output from multiple translation units is desired, `stderr' should
5652     be used instead.
5653
5654     The options can be divided into two groups, 1) options describing
5655     the verbosity of the dump, and 2) options describing which
5656     optimizations should be included. The options from both the groups
5657     can be freely mixed as they are non-overlapping. However, in case
5658     of any conflicts, the latter options override the earlier options
5659     on the command line. Though multiple -fopt-info options are
5660     accepted, only one of them can have `=filename'. If other
5661     filenames are provided then all but the first one are ignored.
5662
5663     The dump verbosity has the following options
5664
5665    `optimized'
5666          Print information when an optimization is successfully
5667          applied. It is up to a pass to decide which information is
5668          relevant. For example, the vectorizer passes print the source
5669          location of loops which got successfully vectorized.
5670
5671    `missed'
5672          Print information about missed optimizations. Individual
5673          passes control which information to include in the output.
5674          For example,
5675
5676               gcc -O2 -ftree-vectorize -fopt-info-vec-missed
5677
5678          will print information about missed optimization
5679          opportunities from vectorization passes on stderr.
5680
5681    `note'
5682          Print verbose information about optimizations, such as certain
5683          transformations, more detailed messages about decisions etc.
5684
5685    `all'
5686          Print detailed optimization information. This includes
5687          OPTIMIZED, MISSED, and NOTE.
5688
5689     The second set of options describes a group of optimizations and
5690     may include one or more of the following.
5691
5692    `ipa'
5693          Enable dumps from all interprocedural optimizations.
5694
5695    `loop'
5696          Enable dumps from all loop optimizations.
5697
5698    `inline'
5699          Enable dumps from all inlining optimizations.
5700
5701    `vec'
5702          Enable dumps from all vectorization optimizations.
5703
5704     For example,
5705          gcc -O3 -fopt-info-missed=missed.all
5706
5707     outputs missed optimization report from all the passes into
5708     `missed.all'.
5709
5710     As another example,
5711          gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
5712
5713     will output information about missed optimizations as well as
5714     optimized locations from all the inlining passes into `inline.txt'.
5715
5716     If the FILENAME is provided, then the dumps from all the
5717     applicable optimizations are concatenated into the `filename'.
5718     Otherwise the dump is output onto `stderr'. If OPTIONS is omitted,
5719     it defaults to `all-optall', which means dump all available
5720     optimization info from all the passes. In the following example,
5721     all optimization info is output on to `stderr'.
5722
5723          gcc -O3 -fopt-info
5724
5725     Note that `-fopt-info-vec-missed' behaves the same as
5726     `-fopt-info-missed-vec'.
5727
5728     As another example, consider
5729
5730          gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
5731
5732     Here the two output filenames `vec.miss' and `loop.opt' are in
5733     conflict since only one output file is allowed. In this case, only
5734     the first option takes effect and the subsequent options are
5735     ignored. Thus only the `vec.miss' is produced which cotaints dumps
5736     from the vectorizer about missed opportunities.
5737
5738`-ftree-vectorizer-verbose=N'
5739     This option is deprecated and is implemented in terms of
5740     `-fopt-info'. Please use `-fopt-info-KIND' form instead, where
5741     KIND is one of the valid opt-info options. It prints additional
5742     optimization information.  For N=0 no diagnostic information is
5743     reported.  If N=1 the vectorizer reports each loop that got
5744     vectorized, and the total number of loops that got vectorized.  If
5745     N=2 the vectorizer reports locations which could not be vectorized
5746     and the reasons for those. For any higher verbosity levels all the
5747     analysis and transformation information from the vectorizer is
5748     reported.
5749
5750     Note that the information output by `-ftree-vectorizer-verbose'
5751     option is sent to `stderr'. If the equivalent form
5752     `-fopt-info-OPTIONS=FILENAME' is used then the output is sent into
5753     FILENAME instead.
5754
5755`-frandom-seed=STRING'
5756     This option provides a seed that GCC uses in place of random
5757     numbers in generating certain symbol names that have to be
5758     different in every compiled file.  It is also used to place unique
5759     stamps in coverage data files and the object files that produce
5760     them.  You can use the `-frandom-seed' option to produce
5761     reproducibly identical object files.
5762
5763     The STRING should be different for every file you compile.
5764
5765`-fsched-verbose=N'
5766     On targets that use instruction scheduling, this option controls
5767     the amount of debugging output the scheduler prints.  This
5768     information is written to standard error, unless
5769     `-fdump-rtl-sched1' or `-fdump-rtl-sched2' is specified, in which
5770     case it is output to the usual dump listing file, `.sched1' or
5771     `.sched2' respectively.  However for N greater than nine, the
5772     output is always printed to standard error.
5773
5774     For N greater than zero, `-fsched-verbose' outputs the same
5775     information as `-fdump-rtl-sched1' and `-fdump-rtl-sched2'.  For N
5776     greater than one, it also output basic block probabilities,
5777     detailed ready list information and unit/insn info.  For N greater
5778     than two, it includes RTL at abort point, control-flow and regions
5779     info.  And for N over four, `-fsched-verbose' also includes
5780     dependence info.
5781
5782`-save-temps'
5783`-save-temps=cwd'
5784     Store the usual "temporary" intermediate files permanently; place
5785     them in the current directory and name them based on the source
5786     file.  Thus, compiling `foo.c' with `-c -save-temps' produces files
5787     `foo.i' and `foo.s', as well as `foo.o'.  This creates a
5788     preprocessed `foo.i' output file even though the compiler now
5789     normally uses an integrated preprocessor.
5790
5791     When used in combination with the `-x' command-line option,
5792     `-save-temps' is sensible enough to avoid over writing an input
5793     source file with the same extension as an intermediate file.  The
5794     corresponding intermediate file may be obtained by renaming the
5795     source file before using `-save-temps'.
5796
5797     If you invoke GCC in parallel, compiling several different source
5798     files that share a common base name in different subdirectories or
5799     the same source file compiled for multiple output destinations, it
5800     is likely that the different parallel compilers will interfere
5801     with each other, and overwrite the temporary files.  For instance:
5802
5803          gcc -save-temps -o outdir1/foo.o indir1/foo.c&
5804          gcc -save-temps -o outdir2/foo.o indir2/foo.c&
5805
5806     may result in `foo.i' and `foo.o' being written to simultaneously
5807     by both compilers.
5808
5809`-save-temps=obj'
5810     Store the usual "temporary" intermediate files permanently.  If the
5811     `-o' option is used, the temporary files are based on the object
5812     file.  If the `-o' option is not used, the `-save-temps=obj'
5813     switch behaves like `-save-temps'.
5814
5815     For example:
5816
5817          gcc -save-temps=obj -c foo.c
5818          gcc -save-temps=obj -c bar.c -o dir/xbar.o
5819          gcc -save-temps=obj foobar.c -o dir2/yfoobar
5820
5821     creates `foo.i', `foo.s', `dir/xbar.i', `dir/xbar.s',
5822     `dir2/yfoobar.i', `dir2/yfoobar.s', and `dir2/yfoobar.o'.
5823
5824`-time[=FILE]'
5825     Report the CPU time taken by each subprocess in the compilation
5826     sequence.  For C source files, this is the compiler proper and
5827     assembler (plus the linker if linking is done).
5828
5829     Without the specification of an output file, the output looks like
5830     this:
5831
5832          # cc1 0.12 0.01
5833          # as 0.00 0.01
5834
5835     The first number on each line is the "user time", that is time
5836     spent executing the program itself.  The second number is "system
5837     time", time spent executing operating system routines on behalf of
5838     the program.  Both numbers are in seconds.
5839
5840     With the specification of an output file, the output is appended
5841     to the named file, and it looks like this:
5842
5843          0.12 0.01 cc1 OPTIONS
5844          0.00 0.01 as OPTIONS
5845
5846     The "user time" and the "system time" are moved before the program
5847     name, and the options passed to the program are displayed, so that
5848     one can later tell what file was being compiled, and with which
5849     options.
5850
5851`-fvar-tracking'
5852     Run variable tracking pass.  It computes where variables are
5853     stored at each position in code.  Better debugging information is
5854     then generated (if the debugging information format supports this
5855     information).
5856
5857     It is enabled by default when compiling with optimization (`-Os',
5858     `-O', `-O2', ...), debugging information (`-g') and the debug info
5859     format supports it.
5860
5861`-fvar-tracking-assignments'
5862     Annotate assignments to user variables early in the compilation and
5863     attempt to carry the annotations over throughout the compilation
5864     all the way to the end, in an attempt to improve debug information
5865     while optimizing.  Use of `-gdwarf-4' is recommended along with it.
5866
5867     It can be enabled even if var-tracking is disabled, in which case
5868     annotations are created and maintained, but discarded at the end.
5869
5870`-fvar-tracking-assignments-toggle'
5871     Toggle `-fvar-tracking-assignments', in the same way that
5872     `-gtoggle' toggles `-g'.
5873
5874`-print-file-name=LIBRARY'
5875     Print the full absolute name of the library file LIBRARY that
5876     would be used when linking--and don't do anything else.  With this
5877     option, GCC does not compile or link anything; it just prints the
5878     file name.
5879
5880`-print-multi-directory'
5881     Print the directory name corresponding to the multilib selected by
5882     any other switches present in the command line.  This directory is
5883     supposed to exist in `GCC_EXEC_PREFIX'.
5884
5885`-print-multi-lib'
5886     Print the mapping from multilib directory names to compiler
5887     switches that enable them.  The directory name is separated from
5888     the switches by `;', and each switch starts with an `@' instead of
5889     the `-', without spaces between multiple switches.  This is
5890     supposed to ease shell processing.
5891
5892`-print-multi-os-directory'
5893     Print the path to OS libraries for the selected multilib, relative
5894     to some `lib' subdirectory.  If OS libraries are present in the
5895     `lib' subdirectory and no multilibs are used, this is usually just
5896     `.', if OS libraries are present in `libSUFFIX' sibling
5897     directories this prints e.g. `../lib64', `../lib' or `../lib32',
5898     or if OS libraries are present in `lib/SUBDIR' subdirectories it
5899     prints e.g. `amd64', `sparcv9' or `ev6'.
5900
5901`-print-multiarch'
5902     Print the path to OS libraries for the selected multiarch,
5903     relative to some `lib' subdirectory.
5904
5905`-print-prog-name=PROGRAM'
5906     Like `-print-file-name', but searches for a program such as `cpp'.
5907
5908`-print-libgcc-file-name'
5909     Same as `-print-file-name=libgcc.a'.
5910
5911     This is useful when you use `-nostdlib' or `-nodefaultlibs' but
5912     you do want to link with `libgcc.a'.  You can do:
5913
5914          gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
5915
5916`-print-search-dirs'
5917     Print the name of the configured installation directory and a list
5918     of program and library directories `gcc' searches--and don't do
5919     anything else.
5920
5921     This is useful when `gcc' prints the error message `installation
5922     problem, cannot exec cpp0: No such file or directory'.  To resolve
5923     this you either need to put `cpp0' and the other compiler
5924     components where `gcc' expects to find them, or you can set the
5925     environment variable `GCC_EXEC_PREFIX' to the directory where you
5926     installed them.  Don't forget the trailing `/'.  *Note Environment
5927     Variables::.
5928
5929`-print-sysroot'
5930     Print the target sysroot directory that is used during
5931     compilation.  This is the target sysroot specified either at
5932     configure time or using the `--sysroot' option, possibly with an
5933     extra suffix that depends on compilation options.  If no target
5934     sysroot is specified, the option prints nothing.
5935
5936`-print-sysroot-headers-suffix'
5937     Print the suffix added to the target sysroot when searching for
5938     headers, or give an error if the compiler is not configured with
5939     such a suffix--and don't do anything else.
5940
5941`-dumpmachine'
5942     Print the compiler's target machine (for example,
5943     `i686-pc-linux-gnu')--and don't do anything else.
5944
5945`-dumpversion'
5946     Print the compiler version (for example, `3.0')--and don't do
5947     anything else.
5948
5949`-dumpspecs'
5950     Print the compiler's built-in specs--and don't do anything else.
5951     (This is used when GCC itself is being built.)  *Note Spec Files::.
5952
5953`-fno-eliminate-unused-debug-types'
5954     Normally, when producing DWARF 2 output, GCC avoids producing
5955     debug symbol output for types that are nowhere used in the source
5956     file being compiled.  Sometimes it is useful to have GCC emit
5957     debugging information for all types declared in a compilation
5958     unit, regardless of whether or not they are actually used in that
5959     compilation unit, for example if, in the debugger, you want to
5960     cast a value to a type that is not actually used in your program
5961     (but is declared).  More often, however, this results in a
5962     significant amount of wasted space.
5963
5964
5965File: gcc.info,  Node: Optimize Options,  Next: Preprocessor Options,  Prev: Debugging Options,  Up: Invoking GCC
5966
59673.10 Options That Control Optimization
5968======================================
5969
5970These options control various sorts of optimizations.
5971
5972 Without any optimization option, the compiler's goal is to reduce the
5973cost of compilation and to make debugging produce the expected results.
5974Statements are independent: if you stop the program with a breakpoint
5975between statements, you can then assign a new value to any variable or
5976change the program counter to any other statement in the function and
5977get exactly the results you expect from the source code.
5978
5979 Turning on optimization flags makes the compiler attempt to improve
5980the performance and/or code size at the expense of compilation time and
5981possibly the ability to debug the program.
5982
5983 The compiler performs optimization based on the knowledge it has of the
5984program.  Compiling multiple files at once to a single output file mode
5985allows the compiler to use information gained from all of the files
5986when compiling each of them.
5987
5988 Not all optimizations are controlled directly by a flag.  Only
5989optimizations that have a flag are listed in this section.
5990
5991 Most optimizations are only enabled if an `-O' level is set on the
5992command line.  Otherwise they are disabled, even if individual
5993optimization flags are specified.
5994
5995 Depending on the target and how GCC was configured, a slightly
5996different set of optimizations may be enabled at each `-O' level than
5997those listed here.  You can invoke GCC with `-Q --help=optimizers' to
5998find out the exact set of optimizations that are enabled at each level.
5999*Note Overall Options::, for examples.
6000
6001`-O'
6002`-O1'
6003     Optimize.  Optimizing compilation takes somewhat more time, and a
6004     lot more memory for a large function.
6005
6006     With `-O', the compiler tries to reduce code size and execution
6007     time, without performing any optimizations that take a great deal
6008     of compilation time.
6009
6010     `-O' turns on the following optimization flags:
6011          -fauto-inc-dec
6012          -fcompare-elim
6013          -fcprop-registers
6014          -fdce
6015          -fdefer-pop
6016          -fdelayed-branch
6017          -fdse
6018          -fguess-branch-probability
6019          -fif-conversion2
6020          -fif-conversion
6021          -fipa-pure-const
6022          -fipa-profile
6023          -fipa-reference
6024          -fmerge-constants
6025          -fsplit-wide-types
6026          -ftree-bit-ccp
6027          -ftree-builtin-call-dce
6028          -ftree-ccp
6029          -ftree-ch
6030          -ftree-copyrename
6031          -ftree-dce
6032          -ftree-dominator-opts
6033          -ftree-dse
6034          -ftree-forwprop
6035          -ftree-fre
6036          -ftree-phiprop
6037          -ftree-slsr
6038          -ftree-sra
6039          -ftree-pta
6040          -ftree-ter
6041          -funit-at-a-time
6042
6043     `-O' also turns on `-fomit-frame-pointer' on machines where doing
6044     so does not interfere with debugging.
6045
6046`-O2'
6047     Optimize even more.  GCC performs nearly all supported
6048     optimizations that do not involve a space-speed tradeoff.  As
6049     compared to `-O', this option increases both compilation time and
6050     the performance of the generated code.
6051
6052     `-O2' turns on all optimization flags specified by `-O'.  It also
6053     turns on the following optimization flags:
6054          -fthread-jumps
6055          -falign-functions  -falign-jumps
6056          -falign-loops  -falign-labels
6057          -fcaller-saves
6058          -fcrossjumping
6059          -fcse-follow-jumps  -fcse-skip-blocks
6060          -fdelete-null-pointer-checks
6061          -fdevirtualize
6062          -fexpensive-optimizations
6063          -fgcse  -fgcse-lm
6064          -fhoist-adjacent-loads
6065          -finline-small-functions
6066          -findirect-inlining
6067          -fipa-sra
6068          -foptimize-sibling-calls
6069          -fpartial-inlining
6070          -fpeephole2
6071          -fregmove
6072          -freorder-blocks  -freorder-functions
6073          -frerun-cse-after-loop
6074          -fsched-interblock  -fsched-spec
6075          -fschedule-insns  -fschedule-insns2
6076          -fstrict-aliasing -fstrict-overflow
6077          -ftree-switch-conversion -ftree-tail-merge
6078          -ftree-pre
6079          -ftree-vrp
6080
6081     Please note the warning under `-fgcse' about invoking `-O2' on
6082     programs that use computed gotos.
6083
6084`-O3'
6085     Optimize yet more.  `-O3' turns on all optimizations specified by
6086     `-O2' and also turns on the `-finline-functions',
6087     `-funswitch-loops', `-fpredictive-commoning',
6088     `-fgcse-after-reload', `-ftree-vectorize', `-fvect-cost-model',
6089     `-ftree-partial-pre' and `-fipa-cp-clone' options.
6090
6091`-O0'
6092     Reduce compilation time and make debugging produce the expected
6093     results.  This is the default.
6094
6095`-Os'
6096     Optimize for size.  `-Os' enables all `-O2' optimizations that do
6097     not typically increase code size.  It also performs further
6098     optimizations designed to reduce code size.
6099
6100     `-Os' disables the following optimization flags:
6101          -falign-functions  -falign-jumps  -falign-loops
6102          -falign-labels  -freorder-blocks  -freorder-blocks-and-partition
6103          -fprefetch-loop-arrays  -ftree-vect-loop-version
6104
6105`-Ofast'
6106     Disregard strict standards compliance.  `-Ofast' enables all `-O3'
6107     optimizations.  It also enables optimizations that are not valid
6108     for all standard-compliant programs.  It turns on `-ffast-math'
6109     and the Fortran-specific `-fno-protect-parens' and
6110     `-fstack-arrays'.
6111
6112`-Og'
6113     Optimize debugging experience.  `-Og' enables optimizations that
6114     do not interfere with debugging. It should be the optimization
6115     level of choice for the standard edit-compile-debug cycle, offering
6116     a reasonable level of optimization while maintaining fast
6117     compilation and a good debugging experience.
6118
6119     If you use multiple `-O' options, with or without level numbers,
6120     the last such option is the one that is effective.
6121
6122 Options of the form `-fFLAG' specify machine-independent flags.  Most
6123flags have both positive and negative forms; the negative form of
6124`-ffoo' is `-fno-foo'.  In the table below, only one of the forms is
6125listed--the one you typically use.  You can figure out the other form
6126by either removing `no-' or adding it.
6127
6128 The following options control specific optimizations.  They are either
6129activated by `-O' options or are related to ones that are.  You can use
6130the following flags in the rare cases when "fine-tuning" of
6131optimizations to be performed is desired.
6132
6133`-fno-default-inline'
6134     Do not make member functions inline by default merely because they
6135     are defined inside the class scope (C++ only).  Otherwise, when
6136     you specify `-O', member functions defined inside class scope are
6137     compiled inline by default; i.e., you don't need to add `inline'
6138     in front of the member function name.
6139
6140`-fno-defer-pop'
6141     Always pop the arguments to each function call as soon as that
6142     function returns.  For machines that must pop arguments after a
6143     function call, the compiler normally lets arguments accumulate on
6144     the stack for several function calls and pops them all at once.
6145
6146     Disabled at levels `-O', `-O2', `-O3', `-Os'.
6147
6148`-fforward-propagate'
6149     Perform a forward propagation pass on RTL.  The pass tries to
6150     combine two instructions and checks if the result can be
6151     simplified.  If loop unrolling is active, two passes are performed
6152     and the second is scheduled after loop unrolling.
6153
6154     This option is enabled by default at optimization levels `-O',
6155     `-O2', `-O3', `-Os'.
6156
6157`-ffp-contract=STYLE'
6158     `-ffp-contract=off' disables floating-point expression contraction.
6159     `-ffp-contract=fast' enables floating-point expression contraction
6160     such as forming of fused multiply-add operations if the target has
6161     native support for them.  `-ffp-contract=on' enables
6162     floating-point expression contraction if allowed by the language
6163     standard.  This is currently not implemented and treated equal to
6164     `-ffp-contract=off'.
6165
6166     The default is `-ffp-contract=fast'.
6167
6168`-fomit-frame-pointer'
6169     Don't keep the frame pointer in a register for functions that
6170     don't need one.  This avoids the instructions to save, set up and
6171     restore frame pointers; it also makes an extra register available
6172     in many functions.  *It also makes debugging impossible on some
6173     machines.*
6174
6175     On some machines, such as the VAX, this flag has no effect, because
6176     the standard calling sequence automatically handles the frame
6177     pointer and nothing is saved by pretending it doesn't exist.  The
6178     machine-description macro `FRAME_POINTER_REQUIRED' controls
6179     whether a target machine supports this flag.  *Note Register
6180     Usage: (gccint)Registers.
6181
6182     Starting with GCC version 4.6, the default setting (when not
6183     optimizing for size) for 32-bit GNU/Linux x86 and 32-bit Darwin
6184     x86 targets has been changed to `-fomit-frame-pointer'.  The
6185     default can be reverted to `-fno-omit-frame-pointer' by
6186     configuring GCC with the `--enable-frame-pointer' configure option.
6187
6188     Enabled at levels `-O', `-O2', `-O3', `-Os'.
6189
6190`-foptimize-sibling-calls'
6191     Optimize sibling and tail recursive calls.
6192
6193     Enabled at levels `-O2', `-O3', `-Os'.
6194
6195`-fno-inline'
6196     Do not expand any functions inline apart from those marked with
6197     the `always_inline' attribute.  This is the default when not
6198     optimizing.
6199
6200     Single functions can be exempted from inlining by marking them
6201     with the `noinline' attribute.
6202
6203`-finline-small-functions'
6204     Integrate functions into their callers when their body is smaller
6205     than expected function call code (so overall size of program gets
6206     smaller).  The compiler heuristically decides which functions are
6207     simple enough to be worth integrating in this way.  This inlining
6208     applies to all functions, even those not declared inline.
6209
6210     Enabled at level `-O2'.
6211
6212`-findirect-inlining'
6213     Inline also indirect calls that are discovered to be known at
6214     compile time thanks to previous inlining.  This option has any
6215     effect only when inlining itself is turned on by the
6216     `-finline-functions' or `-finline-small-functions' options.
6217
6218     Enabled at level `-O2'.
6219
6220`-finline-functions'
6221     Consider all functions for inlining, even if they are not declared
6222     inline.  The compiler heuristically decides which functions are
6223     worth integrating in this way.
6224
6225     If all calls to a given function are integrated, and the function
6226     is declared `static', then the function is normally not output as
6227     assembler code in its own right.
6228
6229     Enabled at level `-O3'.
6230
6231`-finline-functions-called-once'
6232     Consider all `static' functions called once for inlining into their
6233     caller even if they are not marked `inline'.  If a call to a given
6234     function is integrated, then the function is not output as
6235     assembler code in its own right.
6236
6237     Enabled at levels `-O1', `-O2', `-O3' and `-Os'.
6238
6239`-fearly-inlining'
6240     Inline functions marked by `always_inline' and functions whose
6241     body seems smaller than the function call overhead early before
6242     doing `-fprofile-generate' instrumentation and real inlining pass.
6243     Doing so makes profiling significantly cheaper and usually
6244     inlining faster on programs having large chains of nested wrapper
6245     functions.
6246
6247     Enabled by default.
6248
6249`-fipa-sra'
6250     Perform interprocedural scalar replacement of aggregates, removal
6251     of unused parameters and replacement of parameters passed by
6252     reference by parameters passed by value.
6253
6254     Enabled at levels `-O2', `-O3' and `-Os'.
6255
6256`-finline-limit=N'
6257     By default, GCC limits the size of functions that can be inlined.
6258     This flag allows coarse control of this limit.  N is the size of
6259     functions that can be inlined in number of pseudo instructions.
6260
6261     Inlining is actually controlled by a number of parameters, which
6262     may be specified individually by using `--param NAME=VALUE'.  The
6263     `-finline-limit=N' option sets some of these parameters as follows:
6264
6265    `max-inline-insns-single'
6266          is set to N/2.
6267
6268    `max-inline-insns-auto'
6269          is set to N/2.
6270
6271     See below for a documentation of the individual parameters
6272     controlling inlining and for the defaults of these parameters.
6273
6274     _Note:_ there may be no value to `-finline-limit' that results in
6275     default behavior.
6276
6277     _Note:_ pseudo instruction represents, in this particular context,
6278     an abstract measurement of function's size.  In no way does it
6279     represent a count of assembly instructions and as such its exact
6280     meaning might change from one release to an another.
6281
6282`-fno-keep-inline-dllexport'
6283     This is a more fine-grained version of `-fkeep-inline-functions',
6284     which applies only to functions that are declared using the
6285     `dllexport' attribute or declspec (*Note Declaring Attributes of
6286     Functions: Function Attributes.)
6287
6288`-fkeep-inline-functions'
6289     In C, emit `static' functions that are declared `inline' into the
6290     object file, even if the function has been inlined into all of its
6291     callers.  This switch does not affect functions using the `extern
6292     inline' extension in GNU C90.  In C++, emit any and all inline
6293     functions into the object file.
6294
6295`-fkeep-static-consts'
6296     Emit variables declared `static const' when optimization isn't
6297     turned on, even if the variables aren't referenced.
6298
6299     GCC enables this option by default.  If you want to force the
6300     compiler to check if a variable is referenced, regardless of
6301     whether or not optimization is turned on, use the
6302     `-fno-keep-static-consts' option.
6303
6304`-fmerge-constants'
6305     Attempt to merge identical constants (string constants and
6306     floating-point constants) across compilation units.
6307
6308     This option is the default for optimized compilation if the
6309     assembler and linker support it.  Use `-fno-merge-constants' to
6310     inhibit this behavior.
6311
6312     Enabled at levels `-O', `-O2', `-O3', `-Os'.
6313
6314`-fmerge-all-constants'
6315     Attempt to merge identical constants and identical variables.
6316
6317     This option implies `-fmerge-constants'.  In addition to
6318     `-fmerge-constants' this considers e.g. even constant initialized
6319     arrays or initialized constant variables with integral or
6320     floating-point types.  Languages like C or C++ require each
6321     variable, including multiple instances of the same variable in
6322     recursive calls, to have distinct locations, so using this option
6323     results in non-conforming behavior.
6324
6325`-fmodulo-sched'
6326     Perform swing modulo scheduling immediately before the first
6327     scheduling pass.  This pass looks at innermost loops and reorders
6328     their instructions by overlapping different iterations.
6329
6330`-fmodulo-sched-allow-regmoves'
6331     Perform more aggressive SMS-based modulo scheduling with register
6332     moves allowed.  By setting this flag certain anti-dependences
6333     edges are deleted, which triggers the generation of reg-moves
6334     based on the life-range analysis.  This option is effective only
6335     with `-fmodulo-sched' enabled.
6336
6337`-fno-branch-count-reg'
6338     Do not use "decrement and branch" instructions on a count register,
6339     but instead generate a sequence of instructions that decrement a
6340     register, compare it against zero, then branch based upon the
6341     result.  This option is only meaningful on architectures that
6342     support such instructions, which include x86, PowerPC, IA-64 and
6343     S/390.
6344
6345     The default is `-fbranch-count-reg'.
6346
6347`-fno-function-cse'
6348     Do not put function addresses in registers; make each instruction
6349     that calls a constant function contain the function's address
6350     explicitly.
6351
6352     This option results in less efficient code, but some strange hacks
6353     that alter the assembler output may be confused by the
6354     optimizations performed when this option is not used.
6355
6356     The default is `-ffunction-cse'
6357
6358`-fno-zero-initialized-in-bss'
6359     If the target supports a BSS section, GCC by default puts
6360     variables that are initialized to zero into BSS.  This can save
6361     space in the resulting code.
6362
6363     This option turns off this behavior because some programs
6364     explicitly rely on variables going to the data section--e.g., so
6365     that the resulting executable can find the beginning of that
6366     section and/or make assumptions based on that.
6367
6368     The default is `-fzero-initialized-in-bss'.
6369
6370`-fmudflap -fmudflapth -fmudflapir'
6371     For front-ends that support it (C and C++), instrument all risky
6372     pointer/array dereferencing operations, some standard library
6373     string/heap functions, and some other associated constructs with
6374     range/validity tests.  Modules so instrumented should be immune to
6375     buffer overflows, invalid heap use, and some other classes of C/C++
6376     programming errors.  The instrumentation relies on a separate
6377     runtime library (`libmudflap'), which is linked into a program if
6378     `-fmudflap' is given at link time.  Run-time behavior of the
6379     instrumented program is controlled by the `MUDFLAP_OPTIONS'
6380     environment variable.  See `env MUDFLAP_OPTIONS=-help a.out' for
6381     its options.
6382
6383     Use `-fmudflapth' instead of `-fmudflap' to compile and to link if
6384     your program is multi-threaded.  Use `-fmudflapir', in addition to
6385     `-fmudflap' or `-fmudflapth', if instrumentation should ignore
6386     pointer reads.  This produces less instrumentation (and therefore
6387     faster execution) and still provides some protection against
6388     outright memory corrupting writes, but allows erroneously read
6389     data to propagate within a program.
6390
6391`-fthread-jumps'
6392     Perform optimizations that check to see if a jump branches to a
6393     location where another comparison subsumed by the first is found.
6394     If so, the first branch is redirected to either the destination of
6395     the second branch or a point immediately following it, depending
6396     on whether the condition is known to be true or false.
6397
6398     Enabled at levels `-O2', `-O3', `-Os'.
6399
6400`-fsplit-wide-types'
6401     When using a type that occupies multiple registers, such as `long
6402     long' on a 32-bit system, split the registers apart and allocate
6403     them independently.  This normally generates better code for those
6404     types, but may make debugging more difficult.
6405
6406     Enabled at levels `-O', `-O2', `-O3', `-Os'.
6407
6408`-fcse-follow-jumps'
6409     In common subexpression elimination (CSE), scan through jump
6410     instructions when the target of the jump is not reached by any
6411     other path.  For example, when CSE encounters an `if' statement
6412     with an `else' clause, CSE follows the jump when the condition
6413     tested is false.
6414
6415     Enabled at levels `-O2', `-O3', `-Os'.
6416
6417`-fcse-skip-blocks'
6418     This is similar to `-fcse-follow-jumps', but causes CSE to follow
6419     jumps that conditionally skip over blocks.  When CSE encounters a
6420     simple `if' statement with no else clause, `-fcse-skip-blocks'
6421     causes CSE to follow the jump around the body of the `if'.
6422
6423     Enabled at levels `-O2', `-O3', `-Os'.
6424
6425`-frerun-cse-after-loop'
6426     Re-run common subexpression elimination after loop optimizations
6427     are performed.
6428
6429     Enabled at levels `-O2', `-O3', `-Os'.
6430
6431`-fgcse'
6432     Perform a global common subexpression elimination pass.  This pass
6433     also performs global constant and copy propagation.
6434
6435     _Note:_ When compiling a program using computed gotos, a GCC
6436     extension, you may get better run-time performance if you disable
6437     the global common subexpression elimination pass by adding
6438     `-fno-gcse' to the command line.
6439
6440     Enabled at levels `-O2', `-O3', `-Os'.
6441
6442`-fgcse-lm'
6443     When `-fgcse-lm' is enabled, global common subexpression
6444     elimination attempts to move loads that are only killed by stores
6445     into themselves.  This allows a loop containing a load/store
6446     sequence to be changed to a load outside the loop, and a
6447     copy/store within the loop.
6448
6449     Enabled by default when `-fgcse' is enabled.
6450
6451`-fgcse-sm'
6452     When `-fgcse-sm' is enabled, a store motion pass is run after
6453     global common subexpression elimination.  This pass attempts to
6454     move stores out of loops.  When used in conjunction with
6455     `-fgcse-lm', loops containing a load/store sequence can be changed
6456     to a load before the loop and a store after the loop.
6457
6458     Not enabled at any optimization level.
6459
6460`-fgcse-las'
6461     When `-fgcse-las' is enabled, the global common subexpression
6462     elimination pass eliminates redundant loads that come after stores
6463     to the same memory location (both partial and full redundancies).
6464
6465     Not enabled at any optimization level.
6466
6467`-fgcse-after-reload'
6468     When `-fgcse-after-reload' is enabled, a redundant load elimination
6469     pass is performed after reload.  The purpose of this pass is to
6470     clean up redundant spilling.
6471
6472`-faggressive-loop-optimizations'
6473     This option tells the loop optimizer to use language constraints to
6474     derive bounds for the number of iterations of a loop.  This
6475     assumes that loop code does not invoke undefined behavior by for
6476     example causing signed integer overflows or out-of-bound array
6477     accesses.  The bounds for the number of iterations of a loop are
6478     used to guide loop unrolling and peeling and loop exit test
6479     optimizations.  This option is enabled by default.
6480
6481`-funsafe-loop-optimizations'
6482     This option tells the loop optimizer to assume that loop indices
6483     do not overflow, and that loops with nontrivial exit condition are
6484     not infinite.  This enables a wider range of loop optimizations
6485     even if the loop optimizer itself cannot prove that these
6486     assumptions are valid.  If you use `-Wunsafe-loop-optimizations',
6487     the compiler warns you if it finds this kind of loop.
6488
6489`-fcrossjumping'
6490     Perform cross-jumping transformation.  This transformation unifies
6491     equivalent code and saves code size.  The resulting code may or
6492     may not perform better than without cross-jumping.
6493
6494     Enabled at levels `-O2', `-O3', `-Os'.
6495
6496`-fauto-inc-dec'
6497     Combine increments or decrements of addresses with memory accesses.
6498     This pass is always skipped on architectures that do not have
6499     instructions to support this.  Enabled by default at `-O' and
6500     higher on architectures that support this.
6501
6502`-fdce'
6503     Perform dead code elimination (DCE) on RTL.  Enabled by default at
6504     `-O' and higher.
6505
6506`-fdse'
6507     Perform dead store elimination (DSE) on RTL.  Enabled by default
6508     at `-O' and higher.
6509
6510`-fif-conversion'
6511     Attempt to transform conditional jumps into branch-less
6512     equivalents.  This includes use of conditional moves, min, max,
6513     set flags and abs instructions, and some tricks doable by standard
6514     arithmetics.  The use of conditional execution on chips where it
6515     is available is controlled by `if-conversion2'.
6516
6517     Enabled at levels `-O', `-O2', `-O3', `-Os'.
6518
6519`-fif-conversion2'
6520     Use conditional execution (where available) to transform
6521     conditional jumps into branch-less equivalents.
6522
6523     Enabled at levels `-O', `-O2', `-O3', `-Os'.
6524
6525`-fdelete-null-pointer-checks'
6526     Assume that programs cannot safely dereference null pointers, and
6527     that no code or data element resides there.  This enables simple
6528     constant folding optimizations at all optimization levels.  In
6529     addition, other optimization passes in GCC use this flag to
6530     control global dataflow analyses that eliminate useless checks for
6531     null pointers; these assume that if a pointer is checked after it
6532     has already been dereferenced, it cannot be null.
6533
6534     Note however that in some environments this assumption is not true.
6535     Use `-fno-delete-null-pointer-checks' to disable this optimization
6536     for programs that depend on that behavior.
6537
6538     Some targets, especially embedded ones, disable this option at all
6539     levels.  Otherwise it is enabled at all levels: `-O0', `-O1',
6540     `-O2', `-O3', `-Os'.  Passes that use the information are enabled
6541     independently at different optimization levels.
6542
6543`-fdevirtualize'
6544     Attempt to convert calls to virtual functions to direct calls.
6545     This is done both within a procedure and interprocedurally as part
6546     of indirect inlining (`-findirect-inlining') and interprocedural
6547     constant propagation (`-fipa-cp').  Enabled at levels `-O2',
6548     `-O3', `-Os'.
6549
6550`-fexpensive-optimizations'
6551     Perform a number of minor optimizations that are relatively
6552     expensive.
6553
6554     Enabled at levels `-O2', `-O3', `-Os'.
6555
6556`-free'
6557     Attempt to remove redundant extension instructions.  This is
6558     especially helpful for the x86-64 architecture, which implicitly
6559     zero-extends in 64-bit registers after writing to their lower
6560     32-bit half.
6561
6562     Enabled for x86 at levels `-O2', `-O3'.
6563
6564`-foptimize-register-move'
6565`-fregmove'
6566     Attempt to reassign register numbers in move instructions and as
6567     operands of other simple instructions in order to maximize the
6568     amount of register tying.  This is especially helpful on machines
6569     with two-operand instructions.
6570
6571     Note `-fregmove' and `-foptimize-register-move' are the same
6572     optimization.
6573
6574     Enabled at levels `-O2', `-O3', `-Os'.
6575
6576`-fira-algorithm=ALGORITHM'
6577     Use the specified coloring algorithm for the integrated register
6578     allocator.  The ALGORITHM argument can be `priority', which
6579     specifies Chow's priority coloring, or `CB', which specifies
6580     Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not
6581     implemented for all architectures, but for those targets that do
6582     support it, it is the default because it generates better code.
6583
6584`-fira-region=REGION'
6585     Use specified regions for the integrated register allocator.  The
6586     REGION argument should be one of the following:
6587
6588    `all'
6589          Use all loops as register allocation regions.  This can give
6590          the best results for machines with a small and/or irregular
6591          register set.
6592
6593    `mixed'
6594          Use all loops except for loops with small register pressure
6595          as the regions.  This value usually gives the best results in
6596          most cases and for most architectures, and is enabled by
6597          default when compiling with optimization for speed (`-O',
6598          `-O2', ...).
6599
6600    `one'
6601          Use all functions as a single region.  This typically results
6602          in the smallest code size, and is enabled by default for
6603          `-Os' or `-O0'.
6604
6605
6606`-fira-hoist-pressure'
6607     Use IRA to evaluate register pressure in the code hoisting pass for
6608     decisions to hoist expressions.  This option usually results in
6609     smaller code, but it can slow the compiler down.
6610
6611     This option is enabled at level `-Os' for all targets.
6612
6613`-fira-loop-pressure'
6614     Use IRA to evaluate register pressure in loops for decisions to
6615     move loop invariants.  This option usually results in generation
6616     of faster and smaller code on machines with large register files
6617     (>= 32 registers), but it can slow the compiler down.
6618
6619     This option is enabled at level `-O3' for some targets.
6620
6621`-fno-ira-share-save-slots'
6622     Disable sharing of stack slots used for saving call-used hard
6623     registers living through a call.  Each hard register gets a
6624     separate stack slot, and as a result function stack frames are
6625     larger.
6626
6627`-fno-ira-share-spill-slots'
6628     Disable sharing of stack slots allocated for pseudo-registers.
6629     Each pseudo-register that does not get a hard register gets a
6630     separate stack slot, and as a result function stack frames are
6631     larger.
6632
6633`-fira-verbose=N'
6634     Control the verbosity of the dump file for the integrated register
6635     allocator.  The default value is 5.  If the value N is greater or
6636     equal to 10, the dump output is sent to stderr using the same
6637     format as N minus 10.
6638
6639`-fdelayed-branch'
6640     If supported for the target machine, attempt to reorder
6641     instructions to exploit instruction slots available after delayed
6642     branch instructions.
6643
6644     Enabled at levels `-O', `-O2', `-O3', `-Os'.
6645
6646`-fschedule-insns'
6647     If supported for the target machine, attempt to reorder
6648     instructions to eliminate execution stalls due to required data
6649     being unavailable.  This helps machines that have slow floating
6650     point or memory load instructions by allowing other instructions
6651     to be issued until the result of the load or floating-point
6652     instruction is required.
6653
6654     Enabled at levels `-O2', `-O3'.
6655
6656`-fschedule-insns2'
6657     Similar to `-fschedule-insns', but requests an additional pass of
6658     instruction scheduling after register allocation has been done.
6659     This is especially useful on machines with a relatively small
6660     number of registers and where memory load instructions take more
6661     than one cycle.
6662
6663     Enabled at levels `-O2', `-O3', `-Os'.
6664
6665`-fno-sched-interblock'
6666     Don't schedule instructions across basic blocks.  This is normally
6667     enabled by default when scheduling before register allocation, i.e.
6668     with `-fschedule-insns' or at `-O2' or higher.
6669
6670`-fno-sched-spec'
6671     Don't allow speculative motion of non-load instructions.  This is
6672     normally enabled by default when scheduling before register
6673     allocation, i.e.  with `-fschedule-insns' or at `-O2' or higher.
6674
6675`-fsched-pressure'
6676     Enable register pressure sensitive insn scheduling before register
6677     allocation.  This only makes sense when scheduling before register
6678     allocation is enabled, i.e. with `-fschedule-insns' or at `-O2' or
6679     higher.  Usage of this option can improve the generated code and
6680     decrease its size by preventing register pressure increase above
6681     the number of available hard registers and subsequent spills in
6682     register allocation.
6683
6684`-fsched-spec-load'
6685     Allow speculative motion of some load instructions.  This only
6686     makes sense when scheduling before register allocation, i.e. with
6687     `-fschedule-insns' or at `-O2' or higher.
6688
6689`-fsched-spec-load-dangerous'
6690     Allow speculative motion of more load instructions.  This only
6691     makes sense when scheduling before register allocation, i.e. with
6692     `-fschedule-insns' or at `-O2' or higher.
6693
6694`-fsched-stalled-insns'
6695`-fsched-stalled-insns=N'
6696     Define how many insns (if any) can be moved prematurely from the
6697     queue of stalled insns into the ready list during the second
6698     scheduling pass.  `-fno-sched-stalled-insns' means that no insns
6699     are moved prematurely, `-fsched-stalled-insns=0' means there is no
6700     limit on how many queued insns can be moved prematurely.
6701     `-fsched-stalled-insns' without a value is equivalent to
6702     `-fsched-stalled-insns=1'.
6703
6704`-fsched-stalled-insns-dep'
6705`-fsched-stalled-insns-dep=N'
6706     Define how many insn groups (cycles) are examined for a dependency
6707     on a stalled insn that is a candidate for premature removal from
6708     the queue of stalled insns.  This has an effect only during the
6709     second scheduling pass, and only if `-fsched-stalled-insns' is
6710     used.  `-fno-sched-stalled-insns-dep' is equivalent to
6711     `-fsched-stalled-insns-dep=0'.  `-fsched-stalled-insns-dep'
6712     without a value is equivalent to `-fsched-stalled-insns-dep=1'.
6713
6714`-fsched2-use-superblocks'
6715     When scheduling after register allocation, use superblock
6716     scheduling.  This allows motion across basic block boundaries,
6717     resulting in faster schedules.  This option is experimental, as
6718     not all machine descriptions used by GCC model the CPU closely
6719     enough to avoid unreliable results from the algorithm.
6720
6721     This only makes sense when scheduling after register allocation,
6722     i.e. with `-fschedule-insns2' or at `-O2' or higher.
6723
6724`-fsched-group-heuristic'
6725     Enable the group heuristic in the scheduler.  This heuristic favors
6726     the instruction that belongs to a schedule group.  This is enabled
6727     by default when scheduling is enabled, i.e. with `-fschedule-insns'
6728     or `-fschedule-insns2' or at `-O2' or higher.
6729
6730`-fsched-critical-path-heuristic'
6731     Enable the critical-path heuristic in the scheduler.  This
6732     heuristic favors instructions on the critical path.  This is
6733     enabled by default when scheduling is enabled, i.e. with
6734     `-fschedule-insns' or `-fschedule-insns2' or at `-O2' or higher.
6735
6736`-fsched-spec-insn-heuristic'
6737     Enable the speculative instruction heuristic in the scheduler.
6738     This heuristic favors speculative instructions with greater
6739     dependency weakness.  This is enabled by default when scheduling
6740     is enabled, i.e.  with `-fschedule-insns' or `-fschedule-insns2'
6741     or at `-O2' or higher.
6742
6743`-fsched-rank-heuristic'
6744     Enable the rank heuristic in the scheduler.  This heuristic favors
6745     the instruction belonging to a basic block with greater size or
6746     frequency.  This is enabled by default when scheduling is enabled,
6747     i.e.  with `-fschedule-insns' or `-fschedule-insns2' or at `-O2'
6748     or higher.
6749
6750`-fsched-last-insn-heuristic'
6751     Enable the last-instruction heuristic in the scheduler.  This
6752     heuristic favors the instruction that is less dependent on the
6753     last instruction scheduled.  This is enabled by default when
6754     scheduling is enabled, i.e. with `-fschedule-insns' or
6755     `-fschedule-insns2' or at `-O2' or higher.
6756
6757`-fsched-dep-count-heuristic'
6758     Enable the dependent-count heuristic in the scheduler.  This
6759     heuristic favors the instruction that has more instructions
6760     depending on it.  This is enabled by default when scheduling is
6761     enabled, i.e.  with `-fschedule-insns' or `-fschedule-insns2' or
6762     at `-O2' or higher.
6763
6764`-freschedule-modulo-scheduled-loops'
6765     Modulo scheduling is performed before traditional scheduling.  If
6766     a loop is modulo scheduled, later scheduling passes may change its
6767     schedule.  Use this option to control that behavior.
6768
6769`-fselective-scheduling'
6770     Schedule instructions using selective scheduling algorithm.
6771     Selective scheduling runs instead of the first scheduler pass.
6772
6773`-fselective-scheduling2'
6774     Schedule instructions using selective scheduling algorithm.
6775     Selective scheduling runs instead of the second scheduler pass.
6776
6777`-fsel-sched-pipelining'
6778     Enable software pipelining of innermost loops during selective
6779     scheduling.  This option has no effect unless one of
6780     `-fselective-scheduling' or `-fselective-scheduling2' is turned on.
6781
6782`-fsel-sched-pipelining-outer-loops'
6783     When pipelining loops during selective scheduling, also pipeline
6784     outer loops.  This option has no effect unless
6785     `-fsel-sched-pipelining' is turned on.
6786
6787`-fshrink-wrap'
6788     Emit function prologues only before parts of the function that
6789     need it, rather than at the top of the function.  This flag is
6790     enabled by default at `-O' and higher.
6791
6792`-fcaller-saves'
6793     Enable allocation of values to registers that are clobbered by
6794     function calls, by emitting extra instructions to save and restore
6795     the registers around such calls.  Such allocation is done only
6796     when it seems to result in better code.
6797
6798     This option is always enabled by default on certain machines,
6799     usually those which have no call-preserved registers to use
6800     instead.
6801
6802     Enabled at levels `-O2', `-O3', `-Os'.
6803
6804`-fcombine-stack-adjustments'
6805     Tracks stack adjustments (pushes and pops) and stack memory
6806     references and then tries to find ways to combine them.
6807
6808     Enabled by default at `-O1' and higher.
6809
6810`-fconserve-stack'
6811     Attempt to minimize stack usage.  The compiler attempts to use less
6812     stack space, even if that makes the program slower.  This option
6813     implies setting the `large-stack-frame' parameter to 100 and the
6814     `large-stack-frame-growth' parameter to 400.
6815
6816`-ftree-reassoc'
6817     Perform reassociation on trees.  This flag is enabled by default
6818     at `-O' and higher.
6819
6820`-ftree-pre'
6821     Perform partial redundancy elimination (PRE) on trees.  This flag
6822     is enabled by default at `-O2' and `-O3'.
6823
6824`-ftree-partial-pre'
6825     Make partial redundancy elimination (PRE) more aggressive.  This
6826     flag is enabled by default at `-O3'.
6827
6828`-ftree-forwprop'
6829     Perform forward propagation on trees.  This flag is enabled by
6830     default at `-O' and higher.
6831
6832`-ftree-fre'
6833     Perform full redundancy elimination (FRE) on trees.  The difference
6834     between FRE and PRE is that FRE only considers expressions that
6835     are computed on all paths leading to the redundant computation.
6836     This analysis is faster than PRE, though it exposes fewer
6837     redundancies.  This flag is enabled by default at `-O' and higher.
6838
6839`-ftree-phiprop'
6840     Perform hoisting of loads from conditional pointers on trees.  This
6841     pass is enabled by default at `-O' and higher.
6842
6843`-fhoist-adjacent-loads'
6844     Speculatively hoist loads from both branches of an if-then-else if
6845     the loads are from adjacent locations in the same structure and
6846     the target architecture has a conditional move instruction.  This
6847     flag is enabled by default at `-O2' and higher.
6848
6849`-ftree-copy-prop'
6850     Perform copy propagation on trees.  This pass eliminates
6851     unnecessary copy operations.  This flag is enabled by default at
6852     `-O' and higher.
6853
6854`-fipa-pure-const'
6855     Discover which functions are pure or constant.  Enabled by default
6856     at `-O' and higher.
6857
6858`-fipa-reference'
6859     Discover which static variables do not escape the compilation unit.
6860     Enabled by default at `-O' and higher.
6861
6862`-fipa-pta'
6863     Perform interprocedural pointer analysis and interprocedural
6864     modification and reference analysis.  This option can cause
6865     excessive memory and compile-time usage on large compilation
6866     units.  It is not enabled by default at any optimization level.
6867
6868`-fipa-profile'
6869     Perform interprocedural profile propagation.  The functions called
6870     only from cold functions are marked as cold. Also functions
6871     executed once (such as `cold', `noreturn', static constructors or
6872     destructors) are identified. Cold functions and loop less parts of
6873     functions executed once are then optimized for size.  Enabled by
6874     default at `-O' and higher.
6875
6876`-fipa-cp'
6877     Perform interprocedural constant propagation.  This optimization
6878     analyzes the program to determine when values passed to functions
6879     are constants and then optimizes accordingly.  This optimization
6880     can substantially increase performance if the application has
6881     constants passed to functions.  This flag is enabled by default at
6882     `-O2', `-Os' and `-O3'.
6883
6884`-fipa-cp-clone'
6885     Perform function cloning to make interprocedural constant
6886     propagation stronger.  When enabled, interprocedural constant
6887     propagation performs function cloning when externally visible
6888     function can be called with constant arguments.  Because this
6889     optimization can create multiple copies of functions, it may
6890     significantly increase code size (see `--param
6891     ipcp-unit-growth=VALUE').  This flag is enabled by default at
6892     `-O3'.
6893
6894`-ftree-sink'
6895     Perform forward store motion  on trees.  This flag is enabled by
6896     default at `-O' and higher.
6897
6898`-ftree-bit-ccp'
6899     Perform sparse conditional bit constant propagation on trees and
6900     propagate pointer alignment information.  This pass only operates
6901     on local scalar variables and is enabled by default at `-O' and
6902     higher.  It requires that `-ftree-ccp' is enabled.
6903
6904`-ftree-ccp'
6905     Perform sparse conditional constant propagation (CCP) on trees.
6906     This pass only operates on local scalar variables and is enabled
6907     by default at `-O' and higher.
6908
6909`-ftree-switch-conversion'
6910     Perform conversion of simple initializations in a switch to
6911     initializations from a scalar array.  This flag is enabled by
6912     default at `-O2' and higher.
6913
6914`-ftree-tail-merge'
6915     Look for identical code sequences.  When found, replace one with a
6916     jump to the other.  This optimization is known as tail merging or
6917     cross jumping.  This flag is enabled by default at `-O2' and
6918     higher.  The compilation time in this pass can be limited using
6919     `max-tail-merge-comparisons' parameter and
6920     `max-tail-merge-iterations' parameter.
6921
6922`-ftree-dce'
6923     Perform dead code elimination (DCE) on trees.  This flag is
6924     enabled by default at `-O' and higher.
6925
6926`-ftree-builtin-call-dce'
6927     Perform conditional dead code elimination (DCE) for calls to
6928     built-in functions that may set `errno' but are otherwise
6929     side-effect free.  This flag is enabled by default at `-O2' and
6930     higher if `-Os' is not also specified.
6931
6932`-ftree-dominator-opts'
6933     Perform a variety of simple scalar cleanups (constant/copy
6934     propagation, redundancy elimination, range propagation and
6935     expression simplification) based on a dominator tree traversal.
6936     This also performs jump threading (to reduce jumps to jumps). This
6937     flag is enabled by default at `-O' and higher.
6938
6939`-ftree-dse'
6940     Perform dead store elimination (DSE) on trees.  A dead store is a
6941     store into a memory location that is later overwritten by another
6942     store without any intervening loads.  In this case the earlier
6943     store can be deleted.  This flag is enabled by default at `-O' and
6944     higher.
6945
6946`-ftree-ch'
6947     Perform loop header copying on trees.  This is beneficial since it
6948     increases effectiveness of code motion optimizations.  It also
6949     saves one jump.  This flag is enabled by default at `-O' and
6950     higher.  It is not enabled for `-Os', since it usually increases
6951     code size.
6952
6953`-ftree-loop-optimize'
6954     Perform loop optimizations on trees.  This flag is enabled by
6955     default at `-O' and higher.
6956
6957`-ftree-loop-linear'
6958     Perform loop interchange transformations on tree.  Same as
6959     `-floop-interchange'.  To use this code transformation, GCC has to
6960     be configured with `--with-ppl' and `--with-cloog' to enable the
6961     Graphite loop transformation infrastructure.
6962
6963`-floop-interchange'
6964     Perform loop interchange transformations on loops.  Interchanging
6965     two nested loops switches the inner and outer loops.  For example,
6966     given a loop like:
6967          DO J = 1, M
6968            DO I = 1, N
6969              A(J, I) = A(J, I) * C
6970            ENDDO
6971          ENDDO
6972     loop interchange transforms the loop as if it were written:
6973          DO I = 1, N
6974            DO J = 1, M
6975              A(J, I) = A(J, I) * C
6976            ENDDO
6977          ENDDO
6978     which can be beneficial when `N' is larger than the caches,
6979     because in Fortran, the elements of an array are stored in memory
6980     contiguously by column, and the original loop iterates over rows,
6981     potentially creating at each access a cache miss.  This
6982     optimization applies to all the languages supported by GCC and is
6983     not limited to Fortran.  To use this code transformation, GCC has
6984     to be configured with `--with-ppl' and `--with-cloog' to enable the
6985     Graphite loop transformation infrastructure.
6986
6987`-floop-strip-mine'
6988     Perform loop strip mining transformations on loops.  Strip mining
6989     splits a loop into two nested loops.  The outer loop has strides
6990     equal to the strip size and the inner loop has strides of the
6991     original loop within a strip.  The strip length can be changed
6992     using the `loop-block-tile-size' parameter.  For example, given a
6993     loop like:
6994          DO I = 1, N
6995            A(I) = A(I) + C
6996          ENDDO
6997     loop strip mining transforms the loop as if it were written:
6998          DO II = 1, N, 51
6999            DO I = II, min (II + 50, N)
7000              A(I) = A(I) + C
7001            ENDDO
7002          ENDDO
7003     This optimization applies to all the languages supported by GCC
7004     and is not limited to Fortran.  To use this code transformation,
7005     GCC has to be configured with `--with-ppl' and `--with-cloog' to
7006     enable the Graphite loop transformation infrastructure.
7007
7008`-floop-block'
7009     Perform loop blocking transformations on loops.  Blocking strip
7010     mines each loop in the loop nest such that the memory accesses of
7011     the element loops fit inside caches.  The strip length can be
7012     changed using the `loop-block-tile-size' parameter.  For example,
7013     given a loop like:
7014          DO I = 1, N
7015            DO J = 1, M
7016              A(J, I) = B(I) + C(J)
7017            ENDDO
7018          ENDDO
7019     loop blocking transforms the loop as if it were written:
7020          DO II = 1, N, 51
7021            DO JJ = 1, M, 51
7022              DO I = II, min (II + 50, N)
7023                DO J = JJ, min (JJ + 50, M)
7024                  A(J, I) = B(I) + C(J)
7025                ENDDO
7026              ENDDO
7027            ENDDO
7028          ENDDO
7029     which can be beneficial when `M' is larger than the caches,
7030     because the innermost loop iterates over a smaller amount of data
7031     which can be kept in the caches.  This optimization applies to all
7032     the languages supported by GCC and is not limited to Fortran.  To
7033     use this code transformation, GCC has to be configured with
7034     `--with-ppl' and `--with-cloog' to enable the Graphite loop
7035     transformation infrastructure.
7036
7037`-fgraphite-identity'
7038     Enable the identity transformation for graphite.  For every SCoP
7039     we generate the polyhedral representation and transform it back to
7040     gimple.  Using `-fgraphite-identity' we can check the costs or
7041     benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some
7042     minimal optimizations are also performed by the code generator
7043     CLooG, like index splitting and dead code elimination in loops.
7044
7045`-floop-nest-optimize'
7046     Enable the ISL based loop nest optimizer.  This is a generic loop
7047     nest optimizer based on the Pluto optimization algorithms.  It
7048     calculates a loop structure optimized for data-locality and
7049     parallelism.  This option is experimental.
7050
7051`-floop-parallelize-all'
7052     Use the Graphite data dependence analysis to identify loops that
7053     can be parallelized.  Parallelize all the loops that can be
7054     analyzed to not contain loop carried dependences without checking
7055     that it is profitable to parallelize the loops.
7056
7057`-fcheck-data-deps'
7058     Compare the results of several data dependence analyzers.  This
7059     option is used for debugging the data dependence analyzers.
7060
7061`-ftree-loop-if-convert'
7062     Attempt to transform conditional jumps in the innermost loops to
7063     branch-less equivalents.  The intent is to remove control-flow from
7064     the innermost loops in order to improve the ability of the
7065     vectorization pass to handle these loops.  This is enabled by
7066     default if vectorization is enabled.
7067
7068`-ftree-loop-if-convert-stores'
7069     Attempt to also if-convert conditional jumps containing memory
7070     writes.  This transformation can be unsafe for multi-threaded
7071     programs as it transforms conditional memory writes into
7072     unconditional memory writes.  For example,
7073          for (i = 0; i < N; i++)
7074            if (cond)
7075              A[i] = expr;
7076     is transformed to
7077          for (i = 0; i < N; i++)
7078            A[i] = cond ? expr : A[i];
7079     potentially producing data races.
7080
7081`-ftree-loop-distribution'
7082     Perform loop distribution.  This flag can improve cache
7083     performance on big loop bodies and allow further loop
7084     optimizations, like parallelization or vectorization, to take
7085     place.  For example, the loop
7086          DO I = 1, N
7087            A(I) = B(I) + C
7088            D(I) = E(I) * F
7089          ENDDO
7090     is transformed to
7091          DO I = 1, N
7092             A(I) = B(I) + C
7093          ENDDO
7094          DO I = 1, N
7095             D(I) = E(I) * F
7096          ENDDO
7097
7098`-ftree-loop-distribute-patterns'
7099     Perform loop distribution of patterns that can be code generated
7100     with calls to a library.  This flag is enabled by default at `-O3'.
7101
7102     This pass distributes the initialization loops and generates a
7103     call to memset zero.  For example, the loop
7104          DO I = 1, N
7105            A(I) = 0
7106            B(I) = A(I) + I
7107          ENDDO
7108     is transformed to
7109          DO I = 1, N
7110             A(I) = 0
7111          ENDDO
7112          DO I = 1, N
7113             B(I) = A(I) + I
7114          ENDDO
7115     and the initialization loop is transformed into a call to memset
7116     zero.
7117
7118`-ftree-loop-im'
7119     Perform loop invariant motion on trees.  This pass moves only
7120     invariants that are hard to handle at RTL level (function calls,
7121     operations that expand to nontrivial sequences of insns).  With
7122     `-funswitch-loops' it also moves operands of conditions that are
7123     invariant out of the loop, so that we can use just trivial
7124     invariantness analysis in loop unswitching.  The pass also includes
7125     store motion.
7126
7127`-ftree-loop-ivcanon'
7128     Create a canonical counter for number of iterations in loops for
7129     which determining number of iterations requires complicated
7130     analysis.  Later optimizations then may determine the number
7131     easily.  Useful especially in connection with unrolling.
7132
7133`-fivopts'
7134     Perform induction variable optimizations (strength reduction,
7135     induction variable merging and induction variable elimination) on
7136     trees.
7137
7138`-ftree-parallelize-loops=n'
7139     Parallelize loops, i.e., split their iteration space to run in n
7140     threads.  This is only possible for loops whose iterations are
7141     independent and can be arbitrarily reordered.  The optimization is
7142     only profitable on multiprocessor machines, for loops that are
7143     CPU-intensive, rather than constrained e.g. by memory bandwidth.
7144     This option implies `-pthread', and thus is only supported on
7145     targets that have support for `-pthread'.
7146
7147`-ftree-pta'
7148     Perform function-local points-to analysis on trees.  This flag is
7149     enabled by default at `-O' and higher.
7150
7151`-ftree-sra'
7152     Perform scalar replacement of aggregates.  This pass replaces
7153     structure references with scalars to prevent committing structures
7154     to memory too early.  This flag is enabled by default at `-O' and
7155     higher.
7156
7157`-ftree-copyrename'
7158     Perform copy renaming on trees.  This pass attempts to rename
7159     compiler temporaries to other variables at copy locations, usually
7160     resulting in variable names which more closely resemble the
7161     original variables.  This flag is enabled by default at `-O' and
7162     higher.
7163
7164`-ftree-coalesce-inlined-vars'
7165     Tell the copyrename pass (see `-ftree-copyrename') to attempt to
7166     combine small user-defined variables too, but only if they were
7167     inlined from other functions.  It is a more limited form of
7168     `-ftree-coalesce-vars'.  This may harm debug information of such
7169     inlined variables, but it will keep variables of the inlined-into
7170     function apart from each other, such that they are more likely to
7171     contain the expected values in a debugging session.  This was the
7172     default in GCC versions older than 4.7.
7173
7174`-ftree-coalesce-vars'
7175     Tell the copyrename pass (see `-ftree-copyrename') to attempt to
7176     combine small user-defined variables too, instead of just compiler
7177     temporaries.  This may severely limit the ability to debug an
7178     optimized program compiled with `-fno-var-tracking-assignments'.
7179     In the negated form, this flag prevents SSA coalescing of user
7180     variables, including inlined ones.  This option is enabled by
7181     default.
7182
7183`-ftree-ter'
7184     Perform temporary expression replacement during the SSA->normal
7185     phase.  Single use/single def temporaries are replaced at their
7186     use location with their defining expression.  This results in
7187     non-GIMPLE code, but gives the expanders much more complex trees
7188     to work on resulting in better RTL generation.  This is enabled by
7189     default at `-O' and higher.
7190
7191`-ftree-slsr'
7192     Perform straight-line strength reduction on trees.  This
7193     recognizes related expressions involving multiplications and
7194     replaces them by less expensive calculations when possible.  This
7195     is enabled by default at `-O' and higher.
7196
7197`-ftree-vectorize'
7198     Perform loop vectorization on trees. This flag is enabled by
7199     default at `-O3'.
7200
7201`-ftree-slp-vectorize'
7202     Perform basic block vectorization on trees. This flag is enabled
7203     by default at `-O3' and when `-ftree-vectorize' is enabled.
7204
7205`-ftree-vect-loop-version'
7206     Perform loop versioning when doing loop vectorization on trees.
7207     When a loop appears to be vectorizable except that data alignment
7208     or data dependence cannot be determined at compile time, then
7209     vectorized and non-vectorized versions of the loop are generated
7210     along with run-time checks for alignment or dependence to control
7211     which version is executed.  This option is enabled by default
7212     except at level `-Os' where it is disabled.
7213
7214`-fvect-cost-model'
7215     Enable cost model for vectorization.  This option is enabled by
7216     default at `-O3'.
7217
7218`-ftree-vrp'
7219     Perform Value Range Propagation on trees.  This is similar to the
7220     constant propagation pass, but instead of values, ranges of values
7221     are propagated.  This allows the optimizers to remove unnecessary
7222     range checks like array bound checks and null pointer checks.
7223     This is enabled by default at `-O2' and higher.  Null pointer check
7224     elimination is only done if `-fdelete-null-pointer-checks' is
7225     enabled.
7226
7227`-ftracer'
7228     Perform tail duplication to enlarge superblock size.  This
7229     transformation simplifies the control flow of the function
7230     allowing other optimizations to do a better job.
7231
7232`-funroll-loops'
7233     Unroll loops whose number of iterations can be determined at
7234     compile time or upon entry to the loop.  `-funroll-loops' implies
7235     `-frerun-cse-after-loop'.  This option makes code larger, and may
7236     or may not make it run faster.
7237
7238`-funroll-all-loops'
7239     Unroll all loops, even if their number of iterations is uncertain
7240     when the loop is entered.  This usually makes programs run more
7241     slowly.  `-funroll-all-loops' implies the same options as
7242     `-funroll-loops',
7243
7244`-fsplit-ivs-in-unroller'
7245     Enables expression of values of induction variables in later
7246     iterations of the unrolled loop using the value in the first
7247     iteration.  This breaks long dependency chains, thus improving
7248     efficiency of the scheduling passes.
7249
7250     A combination of `-fweb' and CSE is often sufficient to obtain the
7251     same effect.  However, that is not reliable in cases where the
7252     loop body is more complicated than a single basic block.  It also
7253     does not work at all on some architectures due to restrictions in
7254     the CSE pass.
7255
7256     This optimization is enabled by default.
7257
7258`-fvariable-expansion-in-unroller'
7259     With this option, the compiler creates multiple copies of some
7260     local variables when unrolling a loop, which can result in
7261     superior code.
7262
7263`-fpartial-inlining'
7264     Inline parts of functions.  This option has any effect only when
7265     inlining itself is turned on by the `-finline-functions' or
7266     `-finline-small-functions' options.
7267
7268     Enabled at level `-O2'.
7269
7270`-fpredictive-commoning'
7271     Perform predictive commoning optimization, i.e., reusing
7272     computations (especially memory loads and stores) performed in
7273     previous iterations of loops.
7274
7275     This option is enabled at level `-O3'.
7276
7277`-fprefetch-loop-arrays'
7278     If supported by the target machine, generate instructions to
7279     prefetch memory to improve the performance of loops that access
7280     large arrays.
7281
7282     This option may generate better or worse code; results are highly
7283     dependent on the structure of loops within the source code.
7284
7285     Disabled at level `-Os'.
7286
7287`-fno-peephole'
7288`-fno-peephole2'
7289     Disable any machine-specific peephole optimizations.  The
7290     difference between `-fno-peephole' and `-fno-peephole2' is in how
7291     they are implemented in the compiler; some targets use one, some
7292     use the other, a few use both.
7293
7294     `-fpeephole' is enabled by default.  `-fpeephole2' enabled at
7295     levels `-O2', `-O3', `-Os'.
7296
7297`-fno-guess-branch-probability'
7298     Do not guess branch probabilities using heuristics.
7299
7300     GCC uses heuristics to guess branch probabilities if they are not
7301     provided by profiling feedback (`-fprofile-arcs').  These
7302     heuristics are based on the control flow graph.  If some branch
7303     probabilities are specified by `__builtin_expect', then the
7304     heuristics are used to guess branch probabilities for the rest of
7305     the control flow graph, taking the `__builtin_expect' info into
7306     account.  The interactions between the heuristics and
7307     `__builtin_expect' can be complex, and in some cases, it may be
7308     useful to disable the heuristics so that the effects of
7309     `__builtin_expect' are easier to understand.
7310
7311     The default is `-fguess-branch-probability' at levels `-O', `-O2',
7312     `-O3', `-Os'.
7313
7314`-freorder-blocks'
7315     Reorder basic blocks in the compiled function in order to reduce
7316     number of taken branches and improve code locality.
7317
7318     Enabled at levels `-O2', `-O3'.
7319
7320`-freorder-blocks-and-partition'
7321     In addition to reordering basic blocks in the compiled function,
7322     in order to reduce number of taken branches, partitions hot and
7323     cold basic blocks into separate sections of the assembly and .o
7324     files, to improve paging and cache locality performance.
7325
7326     This optimization is automatically turned off in the presence of
7327     exception handling, for linkonce sections, for functions with a
7328     user-defined section attribute and on any architecture that does
7329     not support named sections.
7330
7331`-freorder-functions'
7332     Reorder functions in the object file in order to improve code
7333     locality.  This is implemented by using special subsections
7334     `.text.hot' for most frequently executed functions and
7335     `.text.unlikely' for unlikely executed functions.  Reordering is
7336     done by the linker so object file format must support named
7337     sections and linker must place them in a reasonable way.
7338
7339     Also profile feedback must be available to make this option
7340     effective.  See `-fprofile-arcs' for details.
7341
7342     Enabled at levels `-O2', `-O3', `-Os'.
7343
7344`-fstrict-aliasing'
7345     Allow the compiler to assume the strictest aliasing rules
7346     applicable to the language being compiled.  For C (and C++), this
7347     activates optimizations based on the type of expressions.  In
7348     particular, an object of one type is assumed never to reside at
7349     the same address as an object of a different type, unless the
7350     types are almost the same.  For example, an `unsigned int' can
7351     alias an `int', but not a `void*' or a `double'.  A character type
7352     may alias any other type.
7353
7354     Pay special attention to code like this:
7355          union a_union {
7356            int i;
7357            double d;
7358          };
7359
7360          int f() {
7361            union a_union t;
7362            t.d = 3.0;
7363            return t.i;
7364          }
7365     The practice of reading from a different union member than the one
7366     most recently written to (called "type-punning") is common.  Even
7367     with `-fstrict-aliasing', type-punning is allowed, provided the
7368     memory is accessed through the union type.  So, the code above
7369     works as expected.  *Note Structures unions enumerations and
7370     bit-fields implementation::.  However, this code might not:
7371          int f() {
7372            union a_union t;
7373            int* ip;
7374            t.d = 3.0;
7375            ip = &t.i;
7376            return *ip;
7377          }
7378
7379     Similarly, access by taking the address, casting the resulting
7380     pointer and dereferencing the result has undefined behavior, even
7381     if the cast uses a union type, e.g.:
7382          int f() {
7383            double d = 3.0;
7384            return ((union a_union *) &d)->i;
7385          }
7386
7387     The `-fstrict-aliasing' option is enabled at levels `-O2', `-O3',
7388     `-Os'.
7389
7390`-fstrict-overflow'
7391     Allow the compiler to assume strict signed overflow rules,
7392     depending on the language being compiled.  For C (and C++) this
7393     means that overflow when doing arithmetic with signed numbers is
7394     undefined, which means that the compiler may assume that it does
7395     not happen.  This permits various optimizations.  For example, the
7396     compiler assumes that an expression like `i + 10 > i' is always
7397     true for signed `i'.  This assumption is only valid if signed
7398     overflow is undefined, as the expression is false if `i + 10'
7399     overflows when using twos complement arithmetic.  When this option
7400     is in effect any attempt to determine whether an operation on
7401     signed numbers overflows must be written carefully to not actually
7402     involve overflow.
7403
7404     This option also allows the compiler to assume strict pointer
7405     semantics: given a pointer to an object, if adding an offset to
7406     that pointer does not produce a pointer to the same object, the
7407     addition is undefined.  This permits the compiler to conclude that
7408     `p + u > p' is always true for a pointer `p' and unsigned integer
7409     `u'.  This assumption is only valid because pointer wraparound is
7410     undefined, as the expression is false if `p + u' overflows using
7411     twos complement arithmetic.
7412
7413     See also the `-fwrapv' option.  Using `-fwrapv' means that integer
7414     signed overflow is fully defined: it wraps.  When `-fwrapv' is
7415     used, there is no difference between `-fstrict-overflow' and
7416     `-fno-strict-overflow' for integers.  With `-fwrapv' certain types
7417     of overflow are permitted.  For example, if the compiler gets an
7418     overflow when doing arithmetic on constants, the overflowed value
7419     can still be used with `-fwrapv', but not otherwise.
7420
7421     The `-fstrict-overflow' option is enabled at levels `-O2', `-O3',
7422     `-Os'.
7423
7424`-falign-functions'
7425`-falign-functions=N'
7426     Align the start of functions to the next power-of-two greater than
7427     N, skipping up to N bytes.  For instance, `-falign-functions=32'
7428     aligns functions to the next 32-byte boundary, but
7429     `-falign-functions=24' aligns to the next 32-byte boundary only if
7430     this can be done by skipping 23 bytes or less.
7431
7432     `-fno-align-functions' and `-falign-functions=1' are equivalent
7433     and mean that functions are not aligned.
7434
7435     Some assemblers only support this flag when N is a power of two;
7436     in that case, it is rounded up.
7437
7438     If N is not specified or is zero, use a machine-dependent default.
7439
7440     Enabled at levels `-O2', `-O3'.
7441
7442`-falign-labels'
7443`-falign-labels=N'
7444     Align all branch targets to a power-of-two boundary, skipping up to
7445     N bytes like `-falign-functions'.  This option can easily make
7446     code slower, because it must insert dummy operations for when the
7447     branch target is reached in the usual flow of the code.
7448
7449     `-fno-align-labels' and `-falign-labels=1' are equivalent and mean
7450     that labels are not aligned.
7451
7452     If `-falign-loops' or `-falign-jumps' are applicable and are
7453     greater than this value, then their values are used instead.
7454
7455     If N is not specified or is zero, use a machine-dependent default
7456     which is very likely to be `1', meaning no alignment.
7457
7458     Enabled at levels `-O2', `-O3'.
7459
7460`-falign-loops'
7461`-falign-loops=N'
7462     Align loops to a power-of-two boundary, skipping up to N bytes
7463     like `-falign-functions'.  If the loops are executed many times,
7464     this makes up for any execution of the dummy operations.
7465
7466     `-fno-align-loops' and `-falign-loops=1' are equivalent and mean
7467     that loops are not aligned.
7468
7469     If N is not specified or is zero, use a machine-dependent default.
7470
7471     Enabled at levels `-O2', `-O3'.
7472
7473`-falign-jumps'
7474`-falign-jumps=N'
7475     Align branch targets to a power-of-two boundary, for branch targets
7476     where the targets can only be reached by jumping, skipping up to N
7477     bytes like `-falign-functions'.  In this case, no dummy operations
7478     need be executed.
7479
7480     `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean
7481     that loops are not aligned.
7482
7483     If N is not specified or is zero, use a machine-dependent default.
7484
7485     Enabled at levels `-O2', `-O3'.
7486
7487`-funit-at-a-time'
7488     This option is left for compatibility reasons. `-funit-at-a-time'
7489     has no effect, while `-fno-unit-at-a-time' implies
7490     `-fno-toplevel-reorder' and `-fno-section-anchors'.
7491
7492     Enabled by default.
7493
7494`-fno-toplevel-reorder'
7495     Do not reorder top-level functions, variables, and `asm'
7496     statements.  Output them in the same order that they appear in the
7497     input file.  When this option is used, unreferenced static
7498     variables are not removed.  This option is intended to support
7499     existing code that relies on a particular ordering.  For new code,
7500     it is better to use attributes.
7501
7502     Enabled at level `-O0'.  When disabled explicitly, it also implies
7503     `-fno-section-anchors', which is otherwise enabled at `-O0' on some
7504     targets.
7505
7506`-fweb'
7507     Constructs webs as commonly used for register allocation purposes
7508     and assign each web individual pseudo register.  This allows the
7509     register allocation pass to operate on pseudos directly, but also
7510     strengthens several other optimization passes, such as CSE, loop
7511     optimizer and trivial dead code remover.  It can, however, make
7512     debugging impossible, since variables no longer stay in a "home
7513     register".
7514
7515     Enabled by default with `-funroll-loops'.
7516
7517`-fwhole-program'
7518     Assume that the current compilation unit represents the whole
7519     program being compiled.  All public functions and variables with
7520     the exception of `main' and those merged by attribute
7521     `externally_visible' become static functions and in effect are
7522     optimized more aggressively by interprocedural optimizers.
7523
7524     This option should not be used in combination with `-flto'.
7525     Instead relying on a linker plugin should provide safer and more
7526     precise information.
7527
7528`-flto[=N]'
7529     This option runs the standard link-time optimizer.  When invoked
7530     with source code, it generates GIMPLE (one of GCC's internal
7531     representations) and writes it to special ELF sections in the
7532     object file.  When the object files are linked together, all the
7533     function bodies are read from these ELF sections and instantiated
7534     as if they had been part of the same translation unit.
7535
7536     To use the link-time optimizer, `-flto' needs to be specified at
7537     compile time and during the final link.  For example:
7538
7539          gcc -c -O2 -flto foo.c
7540          gcc -c -O2 -flto bar.c
7541          gcc -o myprog -flto -O2 foo.o bar.o
7542
7543     The first two invocations to GCC save a bytecode representation of
7544     GIMPLE into special ELF sections inside `foo.o' and `bar.o'.  The
7545     final invocation reads the GIMPLE bytecode from `foo.o' and
7546     `bar.o', merges the two files into a single internal image, and
7547     compiles the result as usual.  Since both `foo.o' and `bar.o' are
7548     merged into a single image, this causes all the interprocedural
7549     analyses and optimizations in GCC to work across the two files as
7550     if they were a single one.  This means, for example, that the
7551     inliner is able to inline functions in `bar.o' into functions in
7552     `foo.o' and vice-versa.
7553
7554     Another (simpler) way to enable link-time optimization is:
7555
7556          gcc -o myprog -flto -O2 foo.c bar.c
7557
7558     The above generates bytecode for `foo.c' and `bar.c', merges them
7559     together into a single GIMPLE representation and optimizes them as
7560     usual to produce `myprog'.
7561
7562     The only important thing to keep in mind is that to enable
7563     link-time optimizations the `-flto' flag needs to be passed to
7564     both the compile and the link commands.
7565
7566     To make whole program optimization effective, it is necessary to
7567     make certain whole program assumptions.  The compiler needs to know
7568     what functions and variables can be accessed by libraries and
7569     runtime outside of the link-time optimized unit.  When supported
7570     by the linker, the linker plugin (see `-fuse-linker-plugin')
7571     passes information to the compiler about used and externally
7572     visible symbols.  When the linker plugin is not available,
7573     `-fwhole-program' should be used to allow the compiler to make
7574     these assumptions, which leads to more aggressive optimization
7575     decisions.
7576
7577     Note that when a file is compiled with `-flto', the generated
7578     object file is larger than a regular object file because it
7579     contains GIMPLE bytecodes and the usual final code.  This means
7580     that object files with LTO information can be linked as normal
7581     object files; if `-flto' is not passed to the linker, no
7582     interprocedural optimizations are applied.
7583
7584     Additionally, the optimization flags used to compile individual
7585     files are not necessarily related to those used at link time.  For
7586     instance,
7587
7588          gcc -c -O0 -flto foo.c
7589          gcc -c -O0 -flto bar.c
7590          gcc -o myprog -flto -O3 foo.o bar.o
7591
7592     This produces individual object files with unoptimized assembler
7593     code, but the resulting binary `myprog' is optimized at `-O3'.
7594     If, instead, the final binary is generated without `-flto', then
7595     `myprog' is not optimized.
7596
7597     When producing the final binary with `-flto', GCC only applies
7598     link-time optimizations to those files that contain bytecode.
7599     Therefore, you can mix and match object files and libraries with
7600     GIMPLE bytecodes and final object code.  GCC automatically selects
7601     which files to optimize in LTO mode and which files to link without
7602     further processing.
7603
7604     There are some code generation flags preserved by GCC when
7605     generating bytecodes, as they need to be used during the final link
7606     stage.  Currently, the following options are saved into the GIMPLE
7607     bytecode files: `-fPIC', `-fcommon' and all the `-m' target flags.
7608
7609     At link time, these options are read in and reapplied.  Note that
7610     the current implementation makes no attempt to recognize
7611     conflicting values for these options.  If different files have
7612     conflicting option values (e.g., one file is compiled with `-fPIC'
7613     and another isn't), the compiler simply uses the last value read
7614     from the bytecode files.  It is recommended, then, that you
7615     compile all the files participating in the same link with the same
7616     options.
7617
7618     If LTO encounters objects with C linkage declared with incompatible
7619     types in separate translation units to be linked together
7620     (undefined behavior according to ISO C99 6.2.7), a non-fatal
7621     diagnostic may be issued.  The behavior is still undefined at run
7622     time.
7623
7624     Another feature of LTO is that it is possible to apply
7625     interprocedural optimizations on files written in different
7626     languages.  This requires support in the language front end.
7627     Currently, the C, C++ and Fortran front ends are capable of
7628     emitting GIMPLE bytecodes, so something like this should work:
7629
7630          gcc -c -flto foo.c
7631          g++ -c -flto bar.cc
7632          gfortran -c -flto baz.f90
7633          g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
7634
7635     Notice that the final link is done with `g++' to get the C++
7636     runtime libraries and `-lgfortran' is added to get the Fortran
7637     runtime libraries.  In general, when mixing languages in LTO mode,
7638     you should use the same link command options as when mixing
7639     languages in a regular (non-LTO) compilation; all you need to add
7640     is `-flto' to all the compile and link commands.
7641
7642     If object files containing GIMPLE bytecode are stored in a library
7643     archive, say `libfoo.a', it is possible to extract and use them in
7644     an LTO link if you are using a linker with plugin support.  To
7645     enable this feature, use the flag `-fuse-linker-plugin' at link
7646     time:
7647
7648          gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
7649
7650     With the linker plugin enabled, the linker extracts the needed
7651     GIMPLE files from `libfoo.a' and passes them on to the running GCC
7652     to make them part of the aggregated GIMPLE image to be optimized.
7653
7654     If you are not using a linker with plugin support and/or do not
7655     enable the linker plugin, then the objects inside `libfoo.a' are
7656     extracted and linked as usual, but they do not participate in the
7657     LTO optimization process.
7658
7659     Link-time optimizations do not require the presence of the whole
7660     program to operate.  If the program does not require any symbols
7661     to be exported, it is possible to combine `-flto' and
7662     `-fwhole-program' to allow the interprocedural optimizers to use
7663     more aggressive assumptions which may lead to improved
7664     optimization opportunities.  Use of `-fwhole-program' is not
7665     needed when linker plugin is active (see `-fuse-linker-plugin').
7666
7667     The current implementation of LTO makes no attempt to generate
7668     bytecode that is portable between different types of hosts.  The
7669     bytecode files are versioned and there is a strict version check,
7670     so bytecode files generated in one version of GCC will not work
7671     with an older/newer version of GCC.
7672
7673     Link-time optimization does not work well with generation of
7674     debugging information.  Combining `-flto' with `-g' is currently
7675     experimental and expected to produce wrong results.
7676
7677     If you specify the optional N, the optimization and code
7678     generation done at link time is executed in parallel using N
7679     parallel jobs by utilizing an installed `make' program.  The
7680     environment variable `MAKE' may be used to override the program
7681     used.  The default value for N is 1.
7682
7683     You can also specify `-flto=jobserver' to use GNU make's job
7684     server mode to determine the number of parallel jobs. This is
7685     useful when the Makefile calling GCC is already executing in
7686     parallel.  You must prepend a `+' to the command recipe in the
7687     parent Makefile for this to work.  This option likely only works
7688     if `MAKE' is GNU make.
7689
7690     This option is disabled by default.
7691
7692`-flto-partition=ALG'
7693     Specify the partitioning algorithm used by the link-time optimizer.
7694     The value is either `1to1' to specify a partitioning mirroring the
7695     original source files or `balanced' to specify partitioning into
7696     equally sized chunks (whenever possible) or `max' to create new
7697     partition for every symbol where possible.  Specifying `none' as
7698     an algorithm disables partitioning and streaming completely.  The
7699     default value is `balanced'. While `1to1' can be used as an
7700     workaround for various code ordering issues, the `max'
7701     partitioning is intended for internal testing only.
7702
7703`-flto-compression-level=N'
7704     This option specifies the level of compression used for
7705     intermediate language written to LTO object files, and is only
7706     meaningful in conjunction with LTO mode (`-flto').  Valid values
7707     are 0 (no compression) to 9 (maximum compression).  Values outside
7708     this range are clamped to either 0 or 9.  If the option is not
7709     given, a default balanced compression setting is used.
7710
7711`-flto-report'
7712     Prints a report with internal details on the workings of the
7713     link-time optimizer.  The contents of this report vary from
7714     version to version.  It is meant to be useful to GCC developers
7715     when processing object files in LTO mode (via `-flto').
7716
7717     Disabled by default.
7718
7719`-fuse-linker-plugin'
7720     Enables the use of a linker plugin during link-time optimization.
7721     This option relies on plugin support in the linker, which is
7722     available in gold or in GNU ld 2.21 or newer.
7723
7724     This option enables the extraction of object files with GIMPLE
7725     bytecode out of library archives. This improves the quality of
7726     optimization by exposing more code to the link-time optimizer.
7727     This information specifies what symbols can be accessed externally
7728     (by non-LTO object or during dynamic linking).  Resulting code
7729     quality improvements on binaries (and shared libraries that use
7730     hidden visibility) are similar to `-fwhole-program'.  See `-flto'
7731     for a description of the effect of this flag and how to use it.
7732
7733     This option is enabled by default when LTO support in GCC is
7734     enabled and GCC was configured for use with a linker supporting
7735     plugins (GNU ld 2.21 or newer or gold).
7736
7737`-ffat-lto-objects'
7738     Fat LTO objects are object files that contain both the
7739     intermediate language and the object code. This makes them usable
7740     for both LTO linking and normal linking. This option is effective
7741     only when compiling with `-flto' and is ignored at link time.
7742
7743     `-fno-fat-lto-objects' improves compilation time over plain LTO,
7744     but requires the complete toolchain to be aware of LTO. It
7745     requires a linker with linker plugin support for basic
7746     functionality.  Additionally, `nm', `ar' and `ranlib' need to
7747     support linker plugins to allow a full-featured build environment
7748     (capable of building static libraries etc).  GCC provides the
7749     `gcc-ar', `gcc-nm', `gcc-ranlib' wrappers to pass the right options
7750     to these tools. With non fat LTO makefiles need to be modified to
7751     use them.
7752
7753     The default is `-ffat-lto-objects' but this default is intended to
7754     change in future releases when linker plugin enabled environments
7755     become more common.
7756
7757`-fcompare-elim'
7758     After register allocation and post-register allocation instruction
7759     splitting, identify arithmetic instructions that compute processor
7760     flags similar to a comparison operation based on that arithmetic.
7761     If possible, eliminate the explicit comparison operation.
7762
7763     This pass only applies to certain targets that cannot explicitly
7764     represent the comparison operation before register allocation is
7765     complete.
7766
7767     Enabled at levels `-O', `-O2', `-O3', `-Os'.
7768
7769`-fuse-ld=bfd'
7770     Use the `bfd' linker instead of the default linker.
7771
7772`-fuse-ld=gold'
7773     Use the `gold' linker instead of the default linker.
7774
7775`-fcprop-registers'
7776     After register allocation and post-register allocation instruction
7777     splitting, perform a copy-propagation pass to try to reduce
7778     scheduling dependencies and occasionally eliminate the copy.
7779
7780     Enabled at levels `-O', `-O2', `-O3', `-Os'.
7781
7782`-fprofile-correction'
7783     Profiles collected using an instrumented binary for multi-threaded
7784     programs may be inconsistent due to missed counter updates. When
7785     this option is specified, GCC uses heuristics to correct or smooth
7786     out such inconsistencies. By default, GCC emits an error message
7787     when an inconsistent profile is detected.
7788
7789`-fprofile-dir=PATH'
7790     Set the directory to search for the profile data files in to PATH.
7791     This option affects only the profile data generated by
7792     `-fprofile-generate', `-ftest-coverage', `-fprofile-arcs' and used
7793     by `-fprofile-use' and `-fbranch-probabilities' and its related
7794     options.  Both absolute and relative paths can be used.  By
7795     default, GCC uses the current directory as PATH, thus the profile
7796     data file appears in the same directory as the object file.
7797
7798`-fprofile-generate'
7799`-fprofile-generate=PATH'
7800     Enable options usually used for instrumenting application to
7801     produce profile useful for later recompilation with profile
7802     feedback based optimization.  You must use `-fprofile-generate'
7803     both when compiling and when linking your program.
7804
7805     The following options are enabled: `-fprofile-arcs',
7806     `-fprofile-values', `-fvpt'.
7807
7808     If PATH is specified, GCC looks at the PATH to find the profile
7809     feedback data files. See `-fprofile-dir'.
7810
7811`-fprofile-use'
7812`-fprofile-use=PATH'
7813     Enable profile feedback directed optimizations, and optimizations
7814     generally profitable only with profile feedback available.
7815
7816     The following options are enabled: `-fbranch-probabilities',
7817     `-fvpt', `-funroll-loops', `-fpeel-loops', `-ftracer',
7818     `-ftree-vectorize', `ftree-loop-distribute-patterns'
7819
7820     By default, GCC emits an error message if the feedback profiles do
7821     not match the source code.  This error can be turned into a
7822     warning by using `-Wcoverage-mismatch'.  Note this may result in
7823     poorly optimized code.
7824
7825     If PATH is specified, GCC looks at the PATH to find the profile
7826     feedback data files. See `-fprofile-dir'.
7827
7828 The following options control compiler behavior regarding
7829floating-point arithmetic.  These options trade off between speed and
7830correctness.  All must be specifically enabled.
7831
7832`-ffloat-store'
7833     Do not store floating-point variables in registers, and inhibit
7834     other options that might change whether a floating-point value is
7835     taken from a register or memory.
7836
7837     This option prevents undesirable excess precision on machines such
7838     as the 68000 where the floating registers (of the 68881) keep more
7839     precision than a `double' is supposed to have.  Similarly for the
7840     x86 architecture.  For most programs, the excess precision does
7841     only good, but a few programs rely on the precise definition of
7842     IEEE floating point.  Use `-ffloat-store' for such programs, after
7843     modifying them to store all pertinent intermediate computations
7844     into variables.
7845
7846`-fexcess-precision=STYLE'
7847     This option allows further control over excess precision on
7848     machines where floating-point registers have more precision than
7849     the IEEE `float' and `double' types and the processor does not
7850     support operations rounding to those types.  By default,
7851     `-fexcess-precision=fast' is in effect; this means that operations
7852     are carried out in the precision of the registers and that it is
7853     unpredictable when rounding to the types specified in the source
7854     code takes place.  When compiling C, if
7855     `-fexcess-precision=standard' is specified then excess precision
7856     follows the rules specified in ISO C99; in particular, both casts
7857     and assignments cause values to be rounded to their semantic types
7858     (whereas `-ffloat-store' only affects assignments).  This option
7859     is enabled by default for C if a strict conformance option such as
7860     `-std=c99' is used.
7861
7862     `-fexcess-precision=standard' is not implemented for languages
7863     other than C, and has no effect if `-funsafe-math-optimizations'
7864     or `-ffast-math' is specified.  On the x86, it also has no effect
7865     if `-mfpmath=sse' or `-mfpmath=sse+387' is specified; in the
7866     former case, IEEE semantics apply without excess precision, and in
7867     the latter, rounding is unpredictable.
7868
7869`-ffast-math'
7870     Sets `-fno-math-errno', `-funsafe-math-optimizations',
7871     `-ffinite-math-only', `-fno-rounding-math', `-fno-signaling-nans'
7872     and `-fcx-limited-range'.
7873
7874     This option causes the preprocessor macro `__FAST_MATH__' to be
7875     defined.
7876
7877     This option is not turned on by any `-O' option besides `-Ofast'
7878     since it can result in incorrect output for programs that depend
7879     on an exact implementation of IEEE or ISO rules/specifications for
7880     math functions. It may, however, yield faster code for programs
7881     that do not require the guarantees of these specifications.
7882
7883`-fno-math-errno'
7884     Do not set `errno' after calling math functions that are executed
7885     with a single instruction, e.g., `sqrt'.  A program that relies on
7886     IEEE exceptions for math error handling may want to use this flag
7887     for speed while maintaining IEEE arithmetic compatibility.
7888
7889     This option is not turned on by any `-O' option since it can
7890     result in incorrect output for programs that depend on an exact
7891     implementation of IEEE or ISO rules/specifications for math
7892     functions. It may, however, yield faster code for programs that do
7893     not require the guarantees of these specifications.
7894
7895     The default is `-fmath-errno'.
7896
7897     On Darwin systems, the math library never sets `errno'.  There is
7898     therefore no reason for the compiler to consider the possibility
7899     that it might, and `-fno-math-errno' is the default.
7900
7901`-funsafe-math-optimizations'
7902     Allow optimizations for floating-point arithmetic that (a) assume
7903     that arguments and results are valid and (b) may violate IEEE or
7904     ANSI standards.  When used at link-time, it may include libraries
7905     or startup files that change the default FPU control word or other
7906     similar optimizations.
7907
7908     This option is not turned on by any `-O' option since it can
7909     result in incorrect output for programs that depend on an exact
7910     implementation of IEEE or ISO rules/specifications for math
7911     functions. It may, however, yield faster code for programs that do
7912     not require the guarantees of these specifications.  Enables
7913     `-fno-signed-zeros', `-fno-trapping-math', `-fassociative-math'
7914     and `-freciprocal-math'.
7915
7916     The default is `-fno-unsafe-math-optimizations'.
7917
7918`-fassociative-math'
7919     Allow re-association of operands in series of floating-point
7920     operations.  This violates the ISO C and C++ language standard by
7921     possibly changing computation result.  NOTE: re-ordering may
7922     change the sign of zero as well as ignore NaNs and inhibit or
7923     create underflow or overflow (and thus cannot be used on code that
7924     relies on rounding behavior like `(x + 2**52) - 2**52'.  May also
7925     reorder floating-point comparisons and thus may not be used when
7926     ordered comparisons are required.  This option requires that both
7927     `-fno-signed-zeros' and `-fno-trapping-math' be in effect.
7928     Moreover, it doesn't make much sense with `-frounding-math'. For
7929     Fortran the option is automatically enabled when both
7930     `-fno-signed-zeros' and `-fno-trapping-math' are in effect.
7931
7932     The default is `-fno-associative-math'.
7933
7934`-freciprocal-math'
7935     Allow the reciprocal of a value to be used instead of dividing by
7936     the value if this enables optimizations.  For example `x / y' can
7937     be replaced with `x * (1/y)', which is useful if `(1/y)' is
7938     subject to common subexpression elimination.  Note that this loses
7939     precision and increases the number of flops operating on the value.
7940
7941     The default is `-fno-reciprocal-math'.
7942
7943`-ffinite-math-only'
7944     Allow optimizations for floating-point arithmetic that assume that
7945     arguments and results are not NaNs or +-Infs.
7946
7947     This option is not turned on by any `-O' option since it can
7948     result in incorrect output for programs that depend on an exact
7949     implementation of IEEE or ISO rules/specifications for math
7950     functions. It may, however, yield faster code for programs that do
7951     not require the guarantees of these specifications.
7952
7953     The default is `-fno-finite-math-only'.
7954
7955`-fno-signed-zeros'
7956     Allow optimizations for floating-point arithmetic that ignore the
7957     signedness of zero.  IEEE arithmetic specifies the behavior of
7958     distinct +0.0 and -0.0 values, which then prohibits simplification
7959     of expressions such as x+0.0 or 0.0*x (even with
7960     `-ffinite-math-only').  This option implies that the sign of a
7961     zero result isn't significant.
7962
7963     The default is `-fsigned-zeros'.
7964
7965`-fno-trapping-math'
7966     Compile code assuming that floating-point operations cannot
7967     generate user-visible traps.  These traps include division by
7968     zero, overflow, underflow, inexact result and invalid operation.
7969     This option requires that `-fno-signaling-nans' be in effect.
7970     Setting this option may allow faster code if one relies on
7971     "non-stop" IEEE arithmetic, for example.
7972
7973     This option should never be turned on by any `-O' option since it
7974     can result in incorrect output for programs that depend on an
7975     exact implementation of IEEE or ISO rules/specifications for math
7976     functions.
7977
7978     The default is `-ftrapping-math'.
7979
7980`-frounding-math'
7981     Disable transformations and optimizations that assume default
7982     floating-point rounding behavior.  This is round-to-zero for all
7983     floating point to integer conversions, and round-to-nearest for
7984     all other arithmetic truncations.  This option should be specified
7985     for programs that change the FP rounding mode dynamically, or that
7986     may be executed with a non-default rounding mode.  This option
7987     disables constant folding of floating-point expressions at compile
7988     time (which may be affected by rounding mode) and arithmetic
7989     transformations that are unsafe in the presence of sign-dependent
7990     rounding modes.
7991
7992     The default is `-fno-rounding-math'.
7993
7994     This option is experimental and does not currently guarantee to
7995     disable all GCC optimizations that are affected by rounding mode.
7996     Future versions of GCC may provide finer control of this setting
7997     using C99's `FENV_ACCESS' pragma.  This command-line option will
7998     be used to specify the default state for `FENV_ACCESS'.
7999
8000`-fsignaling-nans'
8001     Compile code assuming that IEEE signaling NaNs may generate
8002     user-visible traps during floating-point operations.  Setting this
8003     option disables optimizations that may change the number of
8004     exceptions visible with signaling NaNs.  This option implies
8005     `-ftrapping-math'.
8006
8007     This option causes the preprocessor macro `__SUPPORT_SNAN__' to be
8008     defined.
8009
8010     The default is `-fno-signaling-nans'.
8011
8012     This option is experimental and does not currently guarantee to
8013     disable all GCC optimizations that affect signaling NaN behavior.
8014
8015`-fsingle-precision-constant'
8016     Treat floating-point constants as single precision instead of
8017     implicitly converting them to double-precision constants.
8018
8019`-fcx-limited-range'
8020     When enabled, this option states that a range reduction step is not
8021     needed when performing complex division.  Also, there is no
8022     checking whether the result of a complex multiplication or
8023     division is `NaN + I*NaN', with an attempt to rescue the situation
8024     in that case.  The default is `-fno-cx-limited-range', but is
8025     enabled by `-ffast-math'.
8026
8027     This option controls the default setting of the ISO C99
8028     `CX_LIMITED_RANGE' pragma.  Nevertheless, the option applies to
8029     all languages.
8030
8031`-fcx-fortran-rules'
8032     Complex multiplication and division follow Fortran rules.  Range
8033     reduction is done as part of complex division, but there is no
8034     checking whether the result of a complex multiplication or
8035     division is `NaN + I*NaN', with an attempt to rescue the situation
8036     in that case.
8037
8038     The default is `-fno-cx-fortran-rules'.
8039
8040
8041 The following options control optimizations that may improve
8042performance, but are not enabled by any `-O' options.  This section
8043includes experimental options that may produce broken code.
8044
8045`-fbranch-probabilities'
8046     After running a program compiled with `-fprofile-arcs' (*note
8047     Options for Debugging Your Program or `gcc': Debugging Options.),
8048     you can compile it a second time using `-fbranch-probabilities',
8049     to improve optimizations based on the number of times each branch
8050     was taken.  When a program compiled with `-fprofile-arcs' exits,
8051     it saves arc execution counts to a file called `SOURCENAME.gcda'
8052     for each source file.  The information in this data file is very
8053     dependent on the structure of the generated code, so you must use
8054     the same source code and the same optimization options for both
8055     compilations.
8056
8057     With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on
8058     each `JUMP_INSN' and `CALL_INSN'.  These can be used to improve
8059     optimization.  Currently, they are only used in one place: in
8060     `reorg.c', instead of guessing which path a branch is most likely
8061     to take, the `REG_BR_PROB' values are used to exactly determine
8062     which path is taken more often.
8063
8064`-fprofile-values'
8065     If combined with `-fprofile-arcs', it adds code so that some data
8066     about values of expressions in the program is gathered.
8067
8068     With `-fbranch-probabilities', it reads back the data gathered
8069     from profiling values of expressions for usage in optimizations.
8070
8071     Enabled with `-fprofile-generate' and `-fprofile-use'.
8072
8073`-fvpt'
8074     If combined with `-fprofile-arcs', this option instructs the
8075     compiler to add code to gather information about values of
8076     expressions.
8077
8078     With `-fbranch-probabilities', it reads back the data gathered and
8079     actually performs the optimizations based on them.  Currently the
8080     optimizations include specialization of division operations using
8081     the knowledge about the value of the denominator.
8082
8083`-frename-registers'
8084     Attempt to avoid false dependencies in scheduled code by making use
8085     of registers left over after register allocation.  This
8086     optimization most benefits processors with lots of registers.
8087     Depending on the debug information format adopted by the target,
8088     however, it can make debugging impossible, since variables no
8089     longer stay in a "home register".
8090
8091     Enabled by default with `-funroll-loops' and `-fpeel-loops'.
8092
8093`-ftracer'
8094     Perform tail duplication to enlarge superblock size.  This
8095     transformation simplifies the control flow of the function
8096     allowing other optimizations to do a better job.
8097
8098     Enabled with `-fprofile-use'.
8099
8100`-funroll-loops'
8101     Unroll loops whose number of iterations can be determined at
8102     compile time or upon entry to the loop.  `-funroll-loops' implies
8103     `-frerun-cse-after-loop', `-fweb' and `-frename-registers'.  It
8104     also turns on complete loop peeling (i.e. complete removal of
8105     loops with a small constant number of iterations).  This option
8106     makes code larger, and may or may not make it run faster.
8107
8108     Enabled with `-fprofile-use'.
8109
8110`-funroll-all-loops'
8111     Unroll all loops, even if their number of iterations is uncertain
8112     when the loop is entered.  This usually makes programs run more
8113     slowly.  `-funroll-all-loops' implies the same options as
8114     `-funroll-loops'.
8115
8116`-fpeel-loops'
8117     Peels loops for which there is enough information that they do not
8118     roll much (from profile feedback).  It also turns on complete loop
8119     peeling (i.e. complete removal of loops with small constant number
8120     of iterations).
8121
8122     Enabled with `-fprofile-use'.
8123
8124`-fmove-loop-invariants'
8125     Enables the loop invariant motion pass in the RTL loop optimizer.
8126     Enabled at level `-O1'
8127
8128`-funswitch-loops'
8129     Move branches with loop invariant conditions out of the loop, with
8130     duplicates of the loop on both branches (modified according to
8131     result of the condition).
8132
8133`-ffunction-sections'
8134`-fdata-sections'
8135     Place each function or data item into its own section in the output
8136     file if the target supports arbitrary sections.  The name of the
8137     function or the name of the data item determines the section's name
8138     in the output file.
8139
8140     Use these options on systems where the linker can perform
8141     optimizations to improve locality of reference in the instruction
8142     space.  Most systems using the ELF object format and SPARC
8143     processors running Solaris 2 have linkers with such optimizations.
8144     AIX may have these optimizations in the future.
8145
8146     Only use these options when there are significant benefits from
8147     doing so.  When you specify these options, the assembler and linker
8148     create larger object and executable files and are also slower.
8149     You cannot use `gprof' on all systems if you specify this option,
8150     and you may have problems with debugging if you specify both this
8151     option and `-g'.
8152
8153`-fbranch-target-load-optimize'
8154     Perform branch target register load optimization before prologue /
8155     epilogue threading.  The use of target registers can typically be
8156     exposed only during reload, thus hoisting loads out of loops and
8157     doing inter-block scheduling needs a separate optimization pass.
8158
8159`-fbranch-target-load-optimize2'
8160     Perform branch target register load optimization after prologue /
8161     epilogue threading.
8162
8163`-fbtr-bb-exclusive'
8164     When performing branch target register load optimization, don't
8165     reuse branch target registers within any basic block.
8166
8167`-fstack-protector'
8168     Emit extra code to check for buffer overflows, such as stack
8169     smashing attacks.  This is done by adding a guard variable to
8170     functions with vulnerable objects.  This includes functions that
8171     call `alloca', and functions with buffers larger than 8 bytes.
8172     The guards are initialized when a function is entered and then
8173     checked when the function exits.  If a guard check fails, an error
8174     message is printed and the program exits.
8175
8176`-fstack-protector-all'
8177     Like `-fstack-protector' except that all functions are protected.
8178
8179`-fsection-anchors'
8180     Try to reduce the number of symbolic address calculations by using
8181     shared "anchor" symbols to address nearby objects.  This
8182     transformation can help to reduce the number of GOT entries and
8183     GOT accesses on some targets.
8184
8185     For example, the implementation of the following function `foo':
8186
8187          static int a, b, c;
8188          int foo (void) { return a + b + c; }
8189
8190     usually calculates the addresses of all three variables, but if you
8191     compile it with `-fsection-anchors', it accesses the variables
8192     from a common anchor point instead.  The effect is similar to the
8193     following pseudocode (which isn't valid C):
8194
8195          int foo (void)
8196          {
8197            register int *xr = &x;
8198            return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
8199          }
8200
8201     Not all targets support this option.
8202
8203`--param NAME=VALUE'
8204     In some places, GCC uses various constants to control the amount of
8205     optimization that is done.  For example, GCC does not inline
8206     functions that contain more than a certain number of instructions.
8207     You can control some of these constants on the command line using
8208     the `--param' option.
8209
8210     The names of specific parameters, and the meaning of the values,
8211     are tied to the internals of the compiler, and are subject to
8212     change without notice in future releases.
8213
8214     In each case, the VALUE is an integer.  The allowable choices for
8215     NAME are:
8216
8217    `predictable-branch-outcome'
8218          When branch is predicted to be taken with probability lower
8219          than this threshold (in percent), then it is considered well
8220          predictable. The default is 10.
8221
8222    `max-crossjump-edges'
8223          The maximum number of incoming edges to consider for
8224          cross-jumping.  The algorithm used by `-fcrossjumping' is
8225          O(N^2) in the number of edges incoming to each block.
8226          Increasing values mean more aggressive optimization, making
8227          the compilation time increase with probably small improvement
8228          in executable size.
8229
8230    `min-crossjump-insns'
8231          The minimum number of instructions that must be matched at
8232          the end of two blocks before cross-jumping is performed on
8233          them.  This value is ignored in the case where all
8234          instructions in the block being cross-jumped from are
8235          matched.  The default value is 5.
8236
8237    `max-grow-copy-bb-insns'
8238          The maximum code size expansion factor when copying basic
8239          blocks instead of jumping.  The expansion is relative to a
8240          jump instruction.  The default value is 8.
8241
8242    `max-goto-duplication-insns'
8243          The maximum number of instructions to duplicate to a block
8244          that jumps to a computed goto.  To avoid O(N^2) behavior in a
8245          number of passes, GCC factors computed gotos early in the
8246          compilation process, and unfactors them as late as possible.
8247          Only computed jumps at the end of a basic blocks with no more
8248          than max-goto-duplication-insns are unfactored.  The default
8249          value is 8.
8250
8251    `max-delay-slot-insn-search'
8252          The maximum number of instructions to consider when looking
8253          for an instruction to fill a delay slot.  If more than this
8254          arbitrary number of instructions are searched, the time
8255          savings from filling the delay slot are minimal, so stop
8256          searching.  Increasing values mean more aggressive
8257          optimization, making the compilation time increase with
8258          probably small improvement in execution time.
8259
8260    `max-delay-slot-live-search'
8261          When trying to fill delay slots, the maximum number of
8262          instructions to consider when searching for a block with
8263          valid live register information.  Increasing this arbitrarily
8264          chosen value means more aggressive optimization, increasing
8265          the compilation time.  This parameter should be removed when
8266          the delay slot code is rewritten to maintain the control-flow
8267          graph.
8268
8269    `max-gcse-memory'
8270          The approximate maximum amount of memory that can be
8271          allocated in order to perform the global common subexpression
8272          elimination optimization.  If more memory than specified is
8273          required, the optimization is not done.
8274
8275    `max-gcse-insertion-ratio'
8276          If the ratio of expression insertions to deletions is larger
8277          than this value for any expression, then RTL PRE inserts or
8278          removes the expression and thus leaves partially redundant
8279          computations in the instruction stream.  The default value is
8280          20.
8281
8282    `max-pending-list-length'
8283          The maximum number of pending dependencies scheduling allows
8284          before flushing the current state and starting over.  Large
8285          functions with few branches or calls can create excessively
8286          large lists which needlessly consume memory and resources.
8287
8288    `max-modulo-backtrack-attempts'
8289          The maximum number of backtrack attempts the scheduler should
8290          make when modulo scheduling a loop.  Larger values can
8291          exponentially increase compilation time.
8292
8293    `max-inline-insns-single'
8294          Several parameters control the tree inliner used in GCC.
8295          This number sets the maximum number of instructions (counted
8296          in GCC's internal representation) in a single function that
8297          the tree inliner considers for inlining.  This only affects
8298          functions declared inline and methods implemented in a class
8299          declaration (C++).  The default value is 400.
8300
8301    `max-inline-insns-auto'
8302          When you use `-finline-functions' (included in `-O3'), a lot
8303          of functions that would otherwise not be considered for
8304          inlining by the compiler are investigated.  To those
8305          functions, a different (more restrictive) limit compared to
8306          functions declared inline can be applied.  The default value
8307          is 40.
8308
8309    `inline-min-speedup'
8310          When estimated performance improvement of caller + callee
8311          runtime exceeds this threshold (in precent), the function can
8312          be inlined regardless the limit on `--param
8313          max-inline-insns-single' and `--param max-inline-insns-auto'.
8314
8315    `large-function-insns'
8316          The limit specifying really large functions.  For functions
8317          larger than this limit after inlining, inlining is
8318          constrained by `--param large-function-growth'.  This
8319          parameter is useful primarily to avoid extreme compilation
8320          time caused by non-linear algorithms used by the back end.
8321          The default value is 2700.
8322
8323    `large-function-growth'
8324          Specifies maximal growth of large function caused by inlining
8325          in percents.  The default value is 100 which limits large
8326          function growth to 2.0 times the original size.
8327
8328    `large-unit-insns'
8329          The limit specifying large translation unit.  Growth caused
8330          by inlining of units larger than this limit is limited by
8331          `--param inline-unit-growth'.  For small units this might be
8332          too tight.  For example, consider a unit consisting of
8333          function A that is inline and B that just calls A three
8334          times.  If B is small relative to A, the growth of unit is
8335          300\% and yet such inlining is very sane.  For very large
8336          units consisting of small inlineable functions, however, the
8337          overall unit growth limit is needed to avoid exponential
8338          explosion of code size.  Thus for smaller units, the size is
8339          increased to `--param large-unit-insns' before applying
8340          `--param inline-unit-growth'.  The default is 10000.
8341
8342    `inline-unit-growth'
8343          Specifies maximal overall growth of the compilation unit
8344          caused by inlining.  The default value is 30 which limits
8345          unit growth to 1.3 times the original size.
8346
8347    `ipcp-unit-growth'
8348          Specifies maximal overall growth of the compilation unit
8349          caused by interprocedural constant propagation.  The default
8350          value is 10 which limits unit growth to 1.1 times the
8351          original size.
8352
8353    `large-stack-frame'
8354          The limit specifying large stack frames.  While inlining the
8355          algorithm is trying to not grow past this limit too much.
8356          The default value is 256 bytes.
8357
8358    `large-stack-frame-growth'
8359          Specifies maximal growth of large stack frames caused by
8360          inlining in percents.  The default value is 1000 which limits
8361          large stack frame growth to 11 times the original size.
8362
8363    `max-inline-insns-recursive'
8364    `max-inline-insns-recursive-auto'
8365          Specifies the maximum number of instructions an out-of-line
8366          copy of a self-recursive inline function can grow into by
8367          performing recursive inlining.
8368
8369          For functions declared inline, `--param
8370          max-inline-insns-recursive' is taken into account.  For
8371          functions not declared inline, recursive inlining happens
8372          only when `-finline-functions' (included in `-O3') is enabled
8373          and `--param max-inline-insns-recursive-auto' is used.  The
8374          default value is 450.
8375
8376    `max-inline-recursive-depth'
8377    `max-inline-recursive-depth-auto'
8378          Specifies the maximum recursion depth used for recursive
8379          inlining.
8380
8381          For functions declared inline, `--param
8382          max-inline-recursive-depth' is taken into account.  For
8383          functions not declared inline, recursive inlining happens
8384          only when `-finline-functions' (included in `-O3') is enabled
8385          and `--param max-inline-recursive-depth-auto' is used.  The
8386          default value is 8.
8387
8388    `min-inline-recursive-probability'
8389          Recursive inlining is profitable only for function having
8390          deep recursion in average and can hurt for function having
8391          little recursion depth by increasing the prologue size or
8392          complexity of function body to other optimizers.
8393
8394          When profile feedback is available (see `-fprofile-generate')
8395          the actual recursion depth can be guessed from probability
8396          that function recurses via a given call expression.  This
8397          parameter limits inlining only to call expressions whose
8398          probability exceeds the given threshold (in percents).  The
8399          default value is 10.
8400
8401    `early-inlining-insns'
8402          Specify growth that the early inliner can make.  In effect it
8403          increases the amount of inlining for code having a large
8404          abstraction penalty.  The default value is 10.
8405
8406    `max-early-inliner-iterations'
8407    `max-early-inliner-iterations'
8408          Limit of iterations of the early inliner.  This basically
8409          bounds the number of nested indirect calls the early inliner
8410          can resolve.  Deeper chains are still handled by late
8411          inlining.
8412
8413    `comdat-sharing-probability'
8414    `comdat-sharing-probability'
8415          Probability (in percent) that C++ inline function with comdat
8416          visibility are shared across multiple compilation units.  The
8417          default value is 20.
8418
8419    `min-vect-loop-bound'
8420          The minimum number of iterations under which loops are not
8421          vectorized when `-ftree-vectorize' is used.  The number of
8422          iterations after vectorization needs to be greater than the
8423          value specified by this option to allow vectorization.  The
8424          default value is 0.
8425
8426    `gcse-cost-distance-ratio'
8427          Scaling factor in calculation of maximum distance an
8428          expression can be moved by GCSE optimizations.  This is
8429          currently supported only in the code hoisting pass.  The
8430          bigger the ratio, the more aggressive code hoisting is with
8431          simple expressions, i.e., the expressions that have cost less
8432          than `gcse-unrestricted-cost'.  Specifying 0 disables
8433          hoisting of simple expressions.  The default value is 10.
8434
8435    `gcse-unrestricted-cost'
8436          Cost, roughly measured as the cost of a single typical machine
8437          instruction, at which GCSE optimizations do not constrain the
8438          distance an expression can travel.  This is currently
8439          supported only in the code hoisting pass.  The lesser the
8440          cost, the more aggressive code hoisting is.  Specifying 0
8441          allows all expressions to travel unrestricted distances.  The
8442          default value is 3.
8443
8444    `max-hoist-depth'
8445          The depth of search in the dominator tree for expressions to
8446          hoist.  This is used to avoid quadratic behavior in hoisting
8447          algorithm.  The value of 0 does not limit on the search, but
8448          may slow down compilation of huge functions.  The default
8449          value is 30.
8450
8451    `max-tail-merge-comparisons'
8452          The maximum amount of similar bbs to compare a bb with.  This
8453          is used to avoid quadratic behavior in tree tail merging.
8454          The default value is 10.
8455
8456    `max-tail-merge-iterations'
8457          The maximum amount of iterations of the pass over the
8458          function.  This is used to limit compilation time in tree
8459          tail merging.  The default value is 2.
8460
8461    `max-unrolled-insns'
8462          The maximum number of instructions that a loop may have to be
8463          unrolled.  If a loop is unrolled, this parameter also
8464          determines how many times the loop code is unrolled.
8465
8466    `max-average-unrolled-insns'
8467          The maximum number of instructions biased by probabilities of
8468          their execution that a loop may have to be unrolled.  If a
8469          loop is unrolled, this parameter also determines how many
8470          times the loop code is unrolled.
8471
8472    `max-unroll-times'
8473          The maximum number of unrollings of a single loop.
8474
8475    `max-peeled-insns'
8476          The maximum number of instructions that a loop may have to be
8477          peeled.  If a loop is peeled, this parameter also determines
8478          how many times the loop code is peeled.
8479
8480    `max-peel-times'
8481          The maximum number of peelings of a single loop.
8482
8483    `max-peel-branches'
8484          The maximum number of branches on the hot path through the
8485          peeled sequence.
8486
8487    `max-completely-peeled-insns'
8488          The maximum number of insns of a completely peeled loop.
8489
8490    `max-completely-peel-times'
8491          The maximum number of iterations of a loop to be suitable for
8492          complete peeling.
8493
8494    `max-completely-peel-loop-nest-depth'
8495          The maximum depth of a loop nest suitable for complete
8496          peeling.
8497
8498    `max-unswitch-insns'
8499          The maximum number of insns of an unswitched loop.
8500
8501    `max-unswitch-level'
8502          The maximum number of branches unswitched in a single loop.
8503
8504    `lim-expensive'
8505          The minimum cost of an expensive expression in the loop
8506          invariant motion.
8507
8508    `iv-consider-all-candidates-bound'
8509          Bound on number of candidates for induction variables, below
8510          which all candidates are considered for each use in induction
8511          variable optimizations.  If there are more candidates than
8512          this, only the most relevant ones are considered to avoid
8513          quadratic time complexity.
8514
8515    `iv-max-considered-uses'
8516          The induction variable optimizations give up on loops that
8517          contain more induction variable uses.
8518
8519    `iv-always-prune-cand-set-bound'
8520          If the number of candidates in the set is smaller than this
8521          value, always try to remove unnecessary ivs from the set when
8522          adding a new one.
8523
8524    `scev-max-expr-size'
8525          Bound on size of expressions used in the scalar evolutions
8526          analyzer.  Large expressions slow the analyzer.
8527
8528    `scev-max-expr-complexity'
8529          Bound on the complexity of the expressions in the scalar
8530          evolutions analyzer.  Complex expressions slow the analyzer.
8531
8532    `omega-max-vars'
8533          The maximum number of variables in an Omega constraint system.
8534          The default value is 128.
8535
8536    `omega-max-geqs'
8537          The maximum number of inequalities in an Omega constraint
8538          system.  The default value is 256.
8539
8540    `omega-max-eqs'
8541          The maximum number of equalities in an Omega constraint
8542          system.  The default value is 128.
8543
8544    `omega-max-wild-cards'
8545          The maximum number of wildcard variables that the Omega
8546          solver is able to insert.  The default value is 18.
8547
8548    `omega-hash-table-size'
8549          The size of the hash table in the Omega solver.  The default
8550          value is 550.
8551
8552    `omega-max-keys'
8553          The maximal number of keys used by the Omega solver.  The
8554          default value is 500.
8555
8556    `omega-eliminate-redundant-constraints'
8557          When set to 1, use expensive methods to eliminate all
8558          redundant constraints.  The default value is 0.
8559
8560    `vect-max-version-for-alignment-checks'
8561          The maximum number of run-time checks that can be performed
8562          when doing loop versioning for alignment in the vectorizer.
8563          See option `-ftree-vect-loop-version' for more information.
8564
8565    `vect-max-version-for-alias-checks'
8566          The maximum number of run-time checks that can be performed
8567          when doing loop versioning for alias in the vectorizer.  See
8568          option `-ftree-vect-loop-version' for more information.
8569
8570    `max-iterations-to-track'
8571          The maximum number of iterations of a loop the brute-force
8572          algorithm for analysis of the number of iterations of the
8573          loop tries to evaluate.
8574
8575    `hot-bb-count-ws-permille'
8576          A basic block profile count is considered hot if it
8577          contributes to the given permillage (i.e. 0...1000) of the
8578          entire profiled execution.
8579
8580    `hot-bb-frequency-fraction'
8581          Select fraction of the entry block frequency of executions of
8582          basic block in function given basic block needs to have to be
8583          considered hot.
8584
8585    `max-predicted-iterations'
8586          The maximum number of loop iterations we predict statically.
8587          This is useful in cases where a function contains a single
8588          loop with known bound and another loop with unknown bound.
8589          The known number of iterations is predicted correctly, while
8590          the unknown number of iterations average to roughly 10.  This
8591          means that the loop without bounds appears artificially cold
8592          relative to the other one.
8593
8594    `align-threshold'
8595          Select fraction of the maximal frequency of executions of a
8596          basic block in a function to align the basic block.
8597
8598    `align-loop-iterations'
8599          A loop expected to iterate at least the selected number of
8600          iterations is aligned.
8601
8602    `tracer-dynamic-coverage'
8603    `tracer-dynamic-coverage-feedback'
8604          This value is used to limit superblock formation once the
8605          given percentage of executed instructions is covered.  This
8606          limits unnecessary code size expansion.
8607
8608          The `tracer-dynamic-coverage-feedback' is used only when
8609          profile feedback is available.  The real profiles (as opposed
8610          to statically estimated ones) are much less balanced allowing
8611          the threshold to be larger value.
8612
8613    `tracer-max-code-growth'
8614          Stop tail duplication once code growth has reached given
8615          percentage.  This is a rather artificial limit, as most of
8616          the duplicates are eliminated later in cross jumping, so it
8617          may be set to much higher values than is the desired code
8618          growth.
8619
8620    `tracer-min-branch-ratio'
8621          Stop reverse growth when the reverse probability of best edge
8622          is less than this threshold (in percent).
8623
8624    `tracer-min-branch-ratio'
8625    `tracer-min-branch-ratio-feedback'
8626          Stop forward growth if the best edge has probability lower
8627          than this threshold.
8628
8629          Similarly to `tracer-dynamic-coverage' two values are
8630          present, one for compilation for profile feedback and one for
8631          compilation without.  The value for compilation with profile
8632          feedback needs to be more conservative (higher) in order to
8633          make tracer effective.
8634
8635    `max-cse-path-length'
8636          The maximum number of basic blocks on path that CSE considers.
8637          The default is 10.
8638
8639    `max-cse-insns'
8640          The maximum number of instructions CSE processes before
8641          flushing.  The default is 1000.
8642
8643    `ggc-min-expand'
8644          GCC uses a garbage collector to manage its own memory
8645          allocation.  This parameter specifies the minimum percentage
8646          by which the garbage collector's heap should be allowed to
8647          expand between collections.  Tuning this may improve
8648          compilation speed; it has no effect on code generation.
8649
8650          The default is 30% + 70% * (RAM/1GB) with an upper bound of
8651          100% when RAM >= 1GB.  If `getrlimit' is available, the
8652          notion of "RAM" is the smallest of actual RAM and
8653          `RLIMIT_DATA' or `RLIMIT_AS'.  If GCC is not able to
8654          calculate RAM on a particular platform, the lower bound of
8655          30% is used.  Setting this parameter and `ggc-min-heapsize'
8656          to zero causes a full collection to occur at every
8657          opportunity.  This is extremely slow, but can be useful for
8658          debugging.
8659
8660    `ggc-min-heapsize'
8661          Minimum size of the garbage collector's heap before it begins
8662          bothering to collect garbage.  The first collection occurs
8663          after the heap expands by `ggc-min-expand'% beyond
8664          `ggc-min-heapsize'.  Again, tuning this may improve
8665          compilation speed, and has no effect on code generation.
8666
8667          The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
8668          that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
8669          exceeded, but with a lower bound of 4096 (four megabytes) and
8670          an upper bound of 131072 (128 megabytes).  If GCC is not able
8671          to calculate RAM on a particular platform, the lower bound is
8672          used.  Setting this parameter very large effectively disables
8673          garbage collection.  Setting this parameter and
8674          `ggc-min-expand' to zero causes a full collection to occur at
8675          every opportunity.
8676
8677    `max-reload-search-insns'
8678          The maximum number of instruction reload should look backward
8679          for equivalent register.  Increasing values mean more
8680          aggressive optimization, making the compilation time increase
8681          with probably slightly better performance.  The default value
8682          is 100.
8683
8684    `max-cselib-memory-locations'
8685          The maximum number of memory locations cselib should take
8686          into account.  Increasing values mean more aggressive
8687          optimization, making the compilation time increase with
8688          probably slightly better performance.  The default value is
8689          500.
8690
8691    `reorder-blocks-duplicate'
8692    `reorder-blocks-duplicate-feedback'
8693          Used by the basic block reordering pass to decide whether to
8694          use unconditional branch or duplicate the code on its
8695          destination.  Code is duplicated when its estimated size is
8696          smaller than this value multiplied by the estimated size of
8697          unconditional jump in the hot spots of the program.
8698
8699          The `reorder-block-duplicate-feedback' is used only when
8700          profile feedback is available.  It may be set to higher
8701          values than `reorder-block-duplicate' since information about
8702          the hot spots is more accurate.
8703
8704    `max-sched-ready-insns'
8705          The maximum number of instructions ready to be issued the
8706          scheduler should consider at any given time during the first
8707          scheduling pass.  Increasing values mean more thorough
8708          searches, making the compilation time increase with probably
8709          little benefit.  The default value is 100.
8710
8711    `max-sched-region-blocks'
8712          The maximum number of blocks in a region to be considered for
8713          interblock scheduling.  The default value is 10.
8714
8715    `max-pipeline-region-blocks'
8716          The maximum number of blocks in a region to be considered for
8717          pipelining in the selective scheduler.  The default value is
8718          15.
8719
8720    `max-sched-region-insns'
8721          The maximum number of insns in a region to be considered for
8722          interblock scheduling.  The default value is 100.
8723
8724    `max-pipeline-region-insns'
8725          The maximum number of insns in a region to be considered for
8726          pipelining in the selective scheduler.  The default value is
8727          200.
8728
8729    `min-spec-prob'
8730          The minimum probability (in percents) of reaching a source
8731          block for interblock speculative scheduling.  The default
8732          value is 40.
8733
8734    `max-sched-extend-regions-iters'
8735          The maximum number of iterations through CFG to extend
8736          regions.  A value of 0 (the default) disables region
8737          extensions.
8738
8739    `max-sched-insn-conflict-delay'
8740          The maximum conflict delay for an insn to be considered for
8741          speculative motion.  The default value is 3.
8742
8743    `sched-spec-prob-cutoff'
8744          The minimal probability of speculation success (in percents),
8745          so that speculative insns are scheduled.  The default value
8746          is 40.
8747
8748    `sched-spec-state-edge-prob-cutoff'
8749          The minimum probability an edge must have for the scheduler
8750          to save its state across it.  The default value is 10.
8751
8752    `sched-mem-true-dep-cost'
8753          Minimal distance (in CPU cycles) between store and load
8754          targeting same memory locations.  The default value is 1.
8755
8756    `selsched-max-lookahead'
8757          The maximum size of the lookahead window of selective
8758          scheduling.  It is a depth of search for available
8759          instructions.  The default value is 50.
8760
8761    `selsched-max-sched-times'
8762          The maximum number of times that an instruction is scheduled
8763          during selective scheduling.  This is the limit on the number
8764          of iterations through which the instruction may be pipelined.
8765          The default value is 2.
8766
8767    `selsched-max-insns-to-rename'
8768          The maximum number of best instructions in the ready list
8769          that are considered for renaming in the selective scheduler.
8770          The default value is 2.
8771
8772    `sms-min-sc'
8773          The minimum value of stage count that swing modulo scheduler
8774          generates.  The default value is 2.
8775
8776    `max-last-value-rtl'
8777          The maximum size measured as number of RTLs that can be
8778          recorded in an expression in combiner for a pseudo register
8779          as last known value of that register.  The default is 10000.
8780
8781    `integer-share-limit'
8782          Small integer constants can use a shared data structure,
8783          reducing the compiler's memory usage and increasing its
8784          speed.  This sets the maximum value of a shared integer
8785          constant.  The default value is 256.
8786
8787    `ssp-buffer-size'
8788          The minimum size of buffers (i.e. arrays) that receive stack
8789          smashing protection when `-fstack-protection' is used.
8790
8791    `max-jump-thread-duplication-stmts'
8792          Maximum number of statements allowed in a block that needs to
8793          be duplicated when threading jumps.
8794
8795    `max-fields-for-field-sensitive'
8796          Maximum number of fields in a structure treated in a field
8797          sensitive manner during pointer analysis.  The default is zero
8798          for `-O0' and `-O1', and 100 for `-Os', `-O2', and `-O3'.
8799
8800    `prefetch-latency'
8801          Estimate on average number of instructions that are executed
8802          before prefetch finishes.  The distance prefetched ahead is
8803          proportional to this constant.  Increasing this number may
8804          also lead to less streams being prefetched (see
8805          `simultaneous-prefetches').
8806
8807    `simultaneous-prefetches'
8808          Maximum number of prefetches that can run at the same time.
8809
8810    `l1-cache-line-size'
8811          The size of cache line in L1 cache, in bytes.
8812
8813    `l1-cache-size'
8814          The size of L1 cache, in kilobytes.
8815
8816    `l2-cache-size'
8817          The size of L2 cache, in kilobytes.
8818
8819    `min-insn-to-prefetch-ratio'
8820          The minimum ratio between the number of instructions and the
8821          number of prefetches to enable prefetching in a loop.
8822
8823    `prefetch-min-insn-to-mem-ratio'
8824          The minimum ratio between the number of instructions and the
8825          number of memory references to enable prefetching in a loop.
8826
8827    `use-canonical-types'
8828          Whether the compiler should use the "canonical" type system.
8829          By default, this should always be 1, which uses a more
8830          efficient internal mechanism for comparing types in C++ and
8831          Objective-C++.  However, if bugs in the canonical type system
8832          are causing compilation failures, set this value to 0 to
8833          disable canonical types.
8834
8835    `switch-conversion-max-branch-ratio'
8836          Switch initialization conversion refuses to create arrays
8837          that are bigger than `switch-conversion-max-branch-ratio'
8838          times the number of branches in the switch.
8839
8840    `max-partial-antic-length'
8841          Maximum length of the partial antic set computed during the
8842          tree partial redundancy elimination optimization
8843          (`-ftree-pre') when optimizing at `-O3' and above.  For some
8844          sorts of source code the enhanced partial redundancy
8845          elimination optimization can run away, consuming all of the
8846          memory available on the host machine.  This parameter sets a
8847          limit on the length of the sets that are computed, which
8848          prevents the runaway behavior.  Setting a value of 0 for this
8849          parameter allows an unlimited set length.
8850
8851    `sccvn-max-scc-size'
8852          Maximum size of a strongly connected component (SCC) during
8853          SCCVN processing.  If this limit is hit, SCCVN processing for
8854          the whole function is not done and optimizations depending on
8855          it are disabled.  The default maximum SCC size is 10000.
8856
8857    `sccvn-max-alias-queries-per-access'
8858          Maximum number of alias-oracle queries we perform when
8859          looking for redundancies for loads and stores.  If this limit
8860          is hit the search is aborted and the load or store is not
8861          considered redundant.  The number of queries is
8862          algorithmically limited to the number of stores on all paths
8863          from the load to the function entry.  The default maxmimum
8864          number of queries is 1000.
8865
8866    `ira-max-loops-num'
8867          IRA uses regional register allocation by default.  If a
8868          function contains more loops than the number given by this
8869          parameter, only at most the given number of the most
8870          frequently-executed loops form regions for regional register
8871          allocation.  The default value of the parameter is 100.
8872
8873    `ira-max-conflict-table-size'
8874          Although IRA uses a sophisticated algorithm to compress the
8875          conflict table, the table can still require excessive amounts
8876          of memory for huge functions.  If the conflict table for a
8877          function could be more than the size in MB given by this
8878          parameter, the register allocator instead uses a faster,
8879          simpler, and lower-quality algorithm that does not require
8880          building a pseudo-register conflict table.  The default value
8881          of the parameter is 2000.
8882
8883    `ira-loop-reserved-regs'
8884          IRA can be used to evaluate more accurate register pressure
8885          in loops for decisions to move loop invariants (see `-O3').
8886          The number of available registers reserved for some other
8887          purposes is given by this parameter.  The default value of
8888          the parameter is 2, which is the minimal number of registers
8889          needed by typical instructions.  This value is the best found
8890          from numerous experiments.
8891
8892    `loop-invariant-max-bbs-in-loop'
8893          Loop invariant motion can be very expensive, both in
8894          compilation time and in amount of needed compile-time memory,
8895          with very large loops.  Loops with more basic blocks than
8896          this parameter won't have loop invariant motion optimization
8897          performed on them.  The default value of the parameter is
8898          1000 for `-O1' and 10000 for `-O2' and above.
8899
8900    `loop-max-datarefs-for-datadeps'
8901          Building data dapendencies is expensive for very large loops.
8902          This parameter limits the number of data references in loops
8903          that are considered for data dependence analysis.  These
8904          large loops are no handled by the optimizations using loop
8905          data dependencies.  The default value is 1000.
8906
8907    `max-vartrack-size'
8908          Sets a maximum number of hash table slots to use during
8909          variable tracking dataflow analysis of any function.  If this
8910          limit is exceeded with variable tracking at assignments
8911          enabled, analysis for that function is retried without it,
8912          after removing all debug insns from the function.  If the
8913          limit is exceeded even without debug insns, var tracking
8914          analysis is completely disabled for the function.  Setting
8915          the parameter to zero makes it unlimited.
8916
8917    `max-vartrack-expr-depth'
8918          Sets a maximum number of recursion levels when attempting to
8919          map variable names or debug temporaries to value expressions.
8920          This trades compilation time for more complete debug
8921          information.  If this is set too low, value expressions that
8922          are available and could be represented in debug information
8923          may end up not being used; setting this higher may enable the
8924          compiler to find more complex debug expressions, but compile
8925          time and memory use may grow.  The default is 12.
8926
8927    `min-nondebug-insn-uid'
8928          Use uids starting at this parameter for nondebug insns.  The
8929          range below the parameter is reserved exclusively for debug
8930          insns created by `-fvar-tracking-assignments', but debug
8931          insns may get (non-overlapping) uids above it if the reserved
8932          range is exhausted.
8933
8934    `ipa-sra-ptr-growth-factor'
8935          IPA-SRA replaces a pointer to an aggregate with one or more
8936          new parameters only when their cumulative size is less or
8937          equal to `ipa-sra-ptr-growth-factor' times the size of the
8938          original pointer parameter.
8939
8940    `tm-max-aggregate-size'
8941          When making copies of thread-local variables in a
8942          transaction, this parameter specifies the size in bytes after
8943          which variables are saved with the logging functions as
8944          opposed to save/restore code sequence pairs.  This option
8945          only applies when using `-fgnu-tm'.
8946
8947    `graphite-max-nb-scop-params'
8948          To avoid exponential effects in the Graphite loop transforms,
8949          the number of parameters in a Static Control Part (SCoP) is
8950          bounded.  The default value is 10 parameters.  A variable
8951          whose value is unknown at compilation time and defined
8952          outside a SCoP is a parameter of the SCoP.
8953
8954    `graphite-max-bbs-per-function'
8955          To avoid exponential effects in the detection of SCoPs, the
8956          size of the functions analyzed by Graphite is bounded.  The
8957          default value is 100 basic blocks.
8958
8959    `loop-block-tile-size'
8960          Loop blocking or strip mining transforms, enabled with
8961          `-floop-block' or `-floop-strip-mine', strip mine each loop
8962          in the loop nest by a given number of iterations.  The strip
8963          length can be changed using the `loop-block-tile-size'
8964          parameter.  The default value is 51 iterations.
8965
8966    `ipa-cp-value-list-size'
8967          IPA-CP attempts to track all possible values and types passed
8968          to a function's parameter in order to propagate them and
8969          perform devirtualization.  `ipa-cp-value-list-size' is the
8970          maximum number of values and types it stores per one formal
8971          parameter of a function.
8972
8973    `lto-partitions'
8974          Specify desired number of partitions produced during WHOPR
8975          compilation.  The number of partitions should exceed the
8976          number of CPUs used for compilation.  The default value is 32.
8977
8978    `lto-minpartition'
8979          Size of minimal partition for WHOPR (in estimated
8980          instructions).  This prevents expenses of splitting very
8981          small programs into too many partitions.
8982
8983    `cxx-max-namespaces-for-diagnostic-help'
8984          The maximum number of namespaces to consult for suggestions
8985          when C++ name lookup fails for an identifier.  The default is
8986          1000.
8987
8988    `sink-frequency-threshold'
8989          The maximum relative execution frequency (in percents) of the
8990          target block relative to a statement's original block to
8991          allow statement sinking of a statement.  Larger numbers
8992          result in more aggressive statement sinking.  The default
8993          value is 75.  A small positive adjustment is applied for
8994          statements with memory operands as those are even more
8995          profitable so sink.
8996
8997    `max-stores-to-sink'
8998          The maximum number of conditional stores paires that can be
8999          sunk.  Set to 0 if either vectorization (`-ftree-vectorize')
9000          or if-conversion (`-ftree-loop-if-convert') is disabled.  The
9001          default is 2.
9002
9003    `allow-load-data-races'
9004          Allow optimizers to introduce new data races on loads.  Set
9005          to 1 to allow, otherwise to 0.  This option is enabled by
9006          default unless implicitly set by the `-fmemory-model=' option.
9007
9008    `allow-store-data-races'
9009          Allow optimizers to introduce new data races on stores.  Set
9010          to 1 to allow, otherwise to 0.  This option is enabled by
9011          default unless implicitly set by the `-fmemory-model=' option.
9012
9013    `allow-packed-load-data-races'
9014          Allow optimizers to introduce new data races on packed data
9015          loads.  Set to 1 to allow, otherwise to 0.  This option is
9016          enabled by default unless implicitly set by the
9017          `-fmemory-model=' option.
9018
9019    `allow-packed-store-data-races'
9020          Allow optimizers to introduce new data races on packed data
9021          stores.  Set to 1 to allow, otherwise to 0.  This option is
9022          enabled by default unless implicitly set by the
9023          `-fmemory-model=' option.
9024
9025    `case-values-threshold'
9026          The smallest number of different values for which it is best
9027          to use a jump-table instead of a tree of conditional
9028          branches.  If the value is 0, use the default for the
9029          machine.  The default is 0.
9030
9031    `tree-reassoc-width'
9032          Set the maximum number of instructions executed in parallel in
9033          reassociated tree. This parameter overrides target dependent
9034          heuristics used by default if has non zero value.
9035
9036    `sched-pressure-algorithm'
9037          Choose between the two available implementations of
9038          `-fsched-pressure'.  Algorithm 1 is the original
9039          implementation and is the more likely to prevent instructions
9040          from being reordered.  Algorithm 2 was designed to be a
9041          compromise between the relatively conservative approach taken
9042          by algorithm 1 and the rather aggressive approach taken by
9043          the default scheduler.  It relies more heavily on having a
9044          regular register file and accurate register pressure classes.
9045          See `haifa-sched.c' in the GCC sources for more details.
9046
9047          The default choice depends on the target.
9048
9049    `max-slsr-cand-scan'
9050          Set the maximum number of existing candidates that will be
9051          considered when seeking a basis for a new straight-line
9052          strength reduction candidate.
9053
9054
9055
9056File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Optimize Options,  Up: Invoking GCC
9057
90583.11 Options Controlling the Preprocessor
9059=========================================
9060
9061These options control the C preprocessor, which is run on each C source
9062file before actual compilation.
9063
9064 If you use the `-E' option, nothing is done except preprocessing.
9065Some of these options make sense only together with `-E' because they
9066cause the preprocessor output to be unsuitable for actual compilation.
9067
9068`-Wp,OPTION'
9069     You can use `-Wp,OPTION' to bypass the compiler driver and pass
9070     OPTION directly through to the preprocessor.  If OPTION contains
9071     commas, it is split into multiple options at the commas.  However,
9072     many options are modified, translated or interpreted by the
9073     compiler driver before being passed to the preprocessor, and `-Wp'
9074     forcibly bypasses this phase.  The preprocessor's direct interface
9075     is undocumented and subject to change, so whenever possible you
9076     should avoid using `-Wp' and let the driver handle the options
9077     instead.
9078
9079`-Xpreprocessor OPTION'
9080     Pass OPTION as an option to the preprocessor.  You can use this to
9081     supply system-specific preprocessor options that GCC does not
9082     recognize.
9083
9084     If you want to pass an option that takes an argument, you must use
9085     `-Xpreprocessor' twice, once for the option and once for the
9086     argument.
9087
9088`-no-integrated-cpp'
9089     Perform preprocessing as a separate pass before compilation.  By
9090     default, GCC performs preprocessing as an integrated part of input
9091     tokenization and parsing.  If this option is provided, the
9092     appropriate language front end (`cc1', `cc1plus', or `cc1obj' for
9093     C, C++, and Objective-C, respectively) is instead invoked twice,
9094     once for preprocessing only and once for actual compilation of the
9095     preprocessed input.  This option may be useful in conjunction with
9096     the `-B' or `-wrapper' options to specify an alternate
9097     preprocessor or perform additional processing of the program
9098     source between normal preprocessing and compilation.
9099
9100`-D NAME'
9101     Predefine NAME as a macro, with definition `1'.
9102
9103`-D NAME=DEFINITION'
9104     The contents of DEFINITION are tokenized and processed as if they
9105     appeared during translation phase three in a `#define' directive.
9106     In particular, the definition will be truncated by embedded
9107     newline characters.
9108
9109     If you are invoking the preprocessor from a shell or shell-like
9110     program you may need to use the shell's quoting syntax to protect
9111     characters such as spaces that have a meaning in the shell syntax.
9112
9113     If you wish to define a function-like macro on the command line,
9114     write its argument list with surrounding parentheses before the
9115     equals sign (if any).  Parentheses are meaningful to most shells,
9116     so you will need to quote the option.  With `sh' and `csh',
9117     `-D'NAME(ARGS...)=DEFINITION'' works.
9118
9119     `-D' and `-U' options are processed in the order they are given on
9120     the command line.  All `-imacros FILE' and `-include FILE' options
9121     are processed after all `-D' and `-U' options.
9122
9123`-U NAME'
9124     Cancel any previous definition of NAME, either built in or
9125     provided with a `-D' option.
9126
9127`-undef'
9128     Do not predefine any system-specific or GCC-specific macros.  The
9129     standard predefined macros remain defined.
9130
9131`-I DIR'
9132     Add the directory DIR to the list of directories to be searched
9133     for header files.  Directories named by `-I' are searched before
9134     the standard system include directories.  If the directory DIR is
9135     a standard system include directory, the option is ignored to
9136     ensure that the default search order for system directories and
9137     the special treatment of system headers are not defeated .  If DIR
9138     begins with `=', then the `=' will be replaced by the sysroot
9139     prefix; see `--sysroot' and `-isysroot'.
9140
9141`-o FILE'
9142     Write output to FILE.  This is the same as specifying FILE as the
9143     second non-option argument to `cpp'.  `gcc' has a different
9144     interpretation of a second non-option argument, so you must use
9145     `-o' to specify the output file.
9146
9147`-Wall'
9148     Turns on all optional warnings which are desirable for normal code.
9149     At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a
9150     warning about integer promotion causing a change of sign in `#if'
9151     expressions.  Note that many of the preprocessor's warnings are on
9152     by default and have no options to control them.
9153
9154`-Wcomment'
9155`-Wcomments'
9156     Warn whenever a comment-start sequence `/*' appears in a `/*'
9157     comment, or whenever a backslash-newline appears in a `//' comment.
9158     (Both forms have the same effect.)
9159
9160`-Wtrigraphs'
9161     Most trigraphs in comments cannot affect the meaning of the
9162     program.  However, a trigraph that would form an escaped newline
9163     (`??/' at the end of a line) can, by changing where the comment
9164     begins or ends.  Therefore, only trigraphs that would form escaped
9165     newlines produce warnings inside a comment.
9166
9167     This option is implied by `-Wall'.  If `-Wall' is not given, this
9168     option is still enabled unless trigraphs are enabled.  To get
9169     trigraph conversion without warnings, but get the other `-Wall'
9170     warnings, use `-trigraphs -Wall -Wno-trigraphs'.
9171
9172`-Wtraditional'
9173     Warn about certain constructs that behave differently in
9174     traditional and ISO C.  Also warn about ISO C constructs that have
9175     no traditional C equivalent, and problematic constructs which
9176     should be avoided.
9177
9178`-Wundef'
9179     Warn whenever an identifier which is not a macro is encountered in
9180     an `#if' directive, outside of `defined'.  Such identifiers are
9181     replaced with zero.
9182
9183`-Wunused-macros'
9184     Warn about macros defined in the main file that are unused.  A
9185     macro is "used" if it is expanded or tested for existence at least
9186     once.  The preprocessor will also warn if the macro has not been
9187     used at the time it is redefined or undefined.
9188
9189     Built-in macros, macros defined on the command line, and macros
9190     defined in include files are not warned about.
9191
9192     _Note:_ If a macro is actually used, but only used in skipped
9193     conditional blocks, then CPP will report it as unused.  To avoid
9194     the warning in such a case, you might improve the scope of the
9195     macro's definition by, for example, moving it into the first
9196     skipped block.  Alternatively, you could provide a dummy use with
9197     something like:
9198
9199          #if defined the_macro_causing_the_warning
9200          #endif
9201
9202`-Wendif-labels'
9203     Warn whenever an `#else' or an `#endif' are followed by text.
9204     This usually happens in code of the form
9205
9206          #if FOO
9207          ...
9208          #else FOO
9209          ...
9210          #endif FOO
9211
9212     The second and third `FOO' should be in comments, but often are not
9213     in older programs.  This warning is on by default.
9214
9215`-Werror'
9216     Make all warnings into hard errors.  Source code which triggers
9217     warnings will be rejected.
9218
9219`-Wsystem-headers'
9220     Issue warnings for code in system headers.  These are normally
9221     unhelpful in finding bugs in your own code, therefore suppressed.
9222     If you are responsible for the system library, you may want to see
9223     them.
9224
9225`-w'
9226     Suppress all warnings, including those which GNU CPP issues by
9227     default.
9228
9229`-pedantic'
9230     Issue all the mandatory diagnostics listed in the C standard.
9231     Some of them are left out by default, since they trigger
9232     frequently on harmless code.
9233
9234`-pedantic-errors'
9235     Issue all the mandatory diagnostics, and make all mandatory
9236     diagnostics into errors.  This includes mandatory diagnostics that
9237     GCC issues without `-pedantic' but treats as warnings.
9238
9239`-M'
9240     Instead of outputting the result of preprocessing, output a rule
9241     suitable for `make' describing the dependencies of the main source
9242     file.  The preprocessor outputs one `make' rule containing the
9243     object file name for that source file, a colon, and the names of
9244     all the included files, including those coming from `-include' or
9245     `-imacros' command line options.
9246
9247     Unless specified explicitly (with `-MT' or `-MQ'), the object file
9248     name consists of the name of the source file with any suffix
9249     replaced with object file suffix and with any leading directory
9250     parts removed.  If there are many included files then the rule is
9251     split into several lines using `\'-newline.  The rule has no
9252     commands.
9253
9254     This option does not suppress the preprocessor's debug output,
9255     such as `-dM'.  To avoid mixing such debug output with the
9256     dependency rules you should explicitly specify the dependency
9257     output file with `-MF', or use an environment variable like
9258     `DEPENDENCIES_OUTPUT' (*note Environment Variables::).  Debug
9259     output will still be sent to the regular output stream as normal.
9260
9261     Passing `-M' to the driver implies `-E', and suppresses warnings
9262     with an implicit `-w'.
9263
9264`-MM'
9265     Like `-M' but do not mention header files that are found in system
9266     header directories, nor header files that are included, directly
9267     or indirectly, from such a header.
9268
9269     This implies that the choice of angle brackets or double quotes in
9270     an `#include' directive does not in itself determine whether that
9271     header will appear in `-MM' dependency output.  This is a slight
9272     change in semantics from GCC versions 3.0 and earlier.
9273
9274`-MF FILE'
9275     When used with `-M' or `-MM', specifies a file to write the
9276     dependencies to.  If no `-MF' switch is given the preprocessor
9277     sends the rules to the same place it would have sent preprocessed
9278     output.
9279
9280     When used with the driver options `-MD' or `-MMD', `-MF' overrides
9281     the default dependency output file.
9282
9283`-MG'
9284     In conjunction with an option such as `-M' requesting dependency
9285     generation, `-MG' assumes missing header files are generated files
9286     and adds them to the dependency list without raising an error.
9287     The dependency filename is taken directly from the `#include'
9288     directive without prepending any path.  `-MG' also suppresses
9289     preprocessed output, as a missing header file renders this useless.
9290
9291     This feature is used in automatic updating of makefiles.
9292
9293`-MP'
9294     This option instructs CPP to add a phony target for each dependency
9295     other than the main file, causing each to depend on nothing.  These
9296     dummy rules work around errors `make' gives if you remove header
9297     files without updating the `Makefile' to match.
9298
9299     This is typical output:
9300
9301          test.o: test.c test.h
9302
9303          test.h:
9304
9305`-MT TARGET'
9306     Change the target of the rule emitted by dependency generation.  By
9307     default CPP takes the name of the main input file, deletes any
9308     directory components and any file suffix such as `.c', and appends
9309     the platform's usual object suffix.  The result is the target.
9310
9311     An `-MT' option will set the target to be exactly the string you
9312     specify.  If you want multiple targets, you can specify them as a
9313     single argument to `-MT', or use multiple `-MT' options.
9314
9315     For example, `-MT '$(objpfx)foo.o'' might give
9316
9317          $(objpfx)foo.o: foo.c
9318
9319`-MQ TARGET'
9320     Same as `-MT', but it quotes any characters which are special to
9321     Make.  `-MQ '$(objpfx)foo.o'' gives
9322
9323          $$(objpfx)foo.o: foo.c
9324
9325     The default target is automatically quoted, as if it were given
9326     with `-MQ'.
9327
9328`-MD'
9329     `-MD' is equivalent to `-M -MF FILE', except that `-E' is not
9330     implied.  The driver determines FILE based on whether an `-o'
9331     option is given.  If it is, the driver uses its argument but with
9332     a suffix of `.d', otherwise it takes the name of the input file,
9333     removes any directory components and suffix, and applies a `.d'
9334     suffix.
9335
9336     If `-MD' is used in conjunction with `-E', any `-o' switch is
9337     understood to specify the dependency output file (*note -MF:
9338     dashMF.), but if used without `-E', each `-o' is understood to
9339     specify a target object file.
9340
9341     Since `-E' is not implied, `-MD' can be used to generate a
9342     dependency output file as a side-effect of the compilation process.
9343
9344`-MMD'
9345     Like `-MD' except mention only user header files, not system
9346     header files.
9347
9348`-fpch-deps'
9349     When using precompiled headers (*note Precompiled Headers::), this
9350     flag will cause the dependency-output flags to also list the files
9351     from the precompiled header's dependencies.  If not specified only
9352     the precompiled header would be listed and not the files that were
9353     used to create it because those files are not consulted when a
9354     precompiled header is used.
9355
9356`-fpch-preprocess'
9357     This option allows use of a precompiled header (*note Precompiled
9358     Headers::) together with `-E'.  It inserts a special `#pragma',
9359     `#pragma GCC pch_preprocess "FILENAME"' in the output to mark the
9360     place where the precompiled header was found, and its FILENAME.
9361     When `-fpreprocessed' is in use, GCC recognizes this `#pragma' and
9362     loads the PCH.
9363
9364     This option is off by default, because the resulting preprocessed
9365     output is only really suitable as input to GCC.  It is switched on
9366     by `-save-temps'.
9367
9368     You should not write this `#pragma' in your own code, but it is
9369     safe to edit the filename if the PCH file is available in a
9370     different location.  The filename may be absolute or it may be
9371     relative to GCC's current directory.
9372
9373`-x c'
9374`-x c++'
9375`-x objective-c'
9376`-x assembler-with-cpp'
9377     Specify the source language: C, C++, Objective-C, or assembly.
9378     This has nothing to do with standards conformance or extensions;
9379     it merely selects which base syntax to expect.  If you give none
9380     of these options, cpp will deduce the language from the extension
9381     of the source file: `.c', `.cc', `.m', or `.S'.  Some other common
9382     extensions for C++ and assembly are also recognized.  If cpp does
9383     not recognize the extension, it will treat the file as C; this is
9384     the most generic mode.
9385
9386     _Note:_ Previous versions of cpp accepted a `-lang' option which
9387     selected both the language and the standards conformance level.
9388     This option has been removed, because it conflicts with the `-l'
9389     option.
9390
9391`-std=STANDARD'
9392`-ansi'
9393     Specify the standard to which the code should conform.  Currently
9394     CPP knows about C and C++ standards; others may be added in the
9395     future.
9396
9397     STANDARD may be one of:
9398    `c90'
9399    `c89'
9400    `iso9899:1990'
9401          The ISO C standard from 1990.  `c90' is the customary
9402          shorthand for this version of the standard.
9403
9404          The `-ansi' option is equivalent to `-std=c90'.
9405
9406    `iso9899:199409'
9407          The 1990 C standard, as amended in 1994.
9408
9409    `iso9899:1999'
9410    `c99'
9411    `iso9899:199x'
9412    `c9x'
9413          The revised ISO C standard, published in December 1999.
9414          Before publication, this was known as C9X.
9415
9416    `iso9899:2011'
9417    `c11'
9418    `c1x'
9419          The revised ISO C standard, published in December 2011.
9420          Before publication, this was known as C1X.
9421
9422    `gnu90'
9423    `gnu89'
9424          The 1990 C standard plus GNU extensions.  This is the default.
9425
9426    `gnu99'
9427    `gnu9x'
9428          The 1999 C standard plus GNU extensions.
9429
9430    `gnu11'
9431    `gnu1x'
9432          The 2011 C standard plus GNU extensions.
9433
9434    `c++98'
9435          The 1998 ISO C++ standard plus amendments.
9436
9437    `gnu++98'
9438          The same as `-std=c++98' plus GNU extensions.  This is the
9439          default for C++ code.
9440
9441`-I-'
9442     Split the include path.  Any directories specified with `-I'
9443     options before `-I-' are searched only for headers requested with
9444     `#include "FILE"'; they are not searched for `#include <FILE>'.
9445     If additional directories are specified with `-I' options after
9446     the `-I-', those directories are searched for all `#include'
9447     directives.
9448
9449     In addition, `-I-' inhibits the use of the directory of the current
9450     file directory as the first search directory for `#include "FILE"'.
9451     This option has been deprecated.
9452
9453`-nostdinc'
9454     Do not search the standard system directories for header files.
9455     Only the directories you have specified with `-I' options (and the
9456     directory of the current file, if appropriate) are searched.
9457
9458`-nostdinc++'
9459     Do not search for header files in the C++-specific standard
9460     directories, but do still search the other standard directories.
9461     (This option is used when building the C++ library.)
9462
9463`-include FILE'
9464     Process FILE as if `#include "file"' appeared as the first line of
9465     the primary source file.  However, the first directory searched
9466     for FILE is the preprocessor's working directory _instead of_ the
9467     directory containing the main source file.  If not found there, it
9468     is searched for in the remainder of the `#include "..."' search
9469     chain as normal.
9470
9471     If multiple `-include' options are given, the files are included
9472     in the order they appear on the command line.
9473
9474`-imacros FILE'
9475     Exactly like `-include', except that any output produced by
9476     scanning FILE is thrown away.  Macros it defines remain defined.
9477     This allows you to acquire all the macros from a header without
9478     also processing its declarations.
9479
9480     All files specified by `-imacros' are processed before all files
9481     specified by `-include'.
9482
9483`-idirafter DIR'
9484     Search DIR for header files, but do it _after_ all directories
9485     specified with `-I' and the standard system directories have been
9486     exhausted.  DIR is treated as a system include directory.  If DIR
9487     begins with `=', then the `=' will be replaced by the sysroot
9488     prefix; see `--sysroot' and `-isysroot'.
9489
9490`-iprefix PREFIX'
9491     Specify PREFIX as the prefix for subsequent `-iwithprefix'
9492     options.  If the prefix represents a directory, you should include
9493     the final `/'.
9494
9495`-iwithprefix DIR'
9496`-iwithprefixbefore DIR'
9497     Append DIR to the prefix specified previously with `-iprefix', and
9498     add the resulting directory to the include search path.
9499     `-iwithprefixbefore' puts it in the same place `-I' would;
9500     `-iwithprefix' puts it where `-idirafter' would.
9501
9502`-isysroot DIR'
9503     This option is like the `--sysroot' option, but applies only to
9504     header files (except for Darwin targets, where it applies to both
9505     header files and libraries).  See the `--sysroot' option for more
9506     information.
9507
9508`-imultilib DIR'
9509     Use DIR as a subdirectory of the directory containing
9510     target-specific C++ headers.
9511
9512`-isystem DIR'
9513     Search DIR for header files, after all directories specified by
9514     `-I' but before the standard system directories.  Mark it as a
9515     system directory, so that it gets the same special treatment as is
9516     applied to the standard system directories.  If DIR begins with
9517     `=', then the `=' will be replaced by the sysroot prefix; see
9518     `--sysroot' and `-isysroot'.
9519
9520`-iquote DIR'
9521     Search DIR only for header files requested with `#include "FILE"';
9522     they are not searched for `#include <FILE>', before all
9523     directories specified by `-I' and before the standard system
9524     directories.  If DIR begins with `=', then the `=' will be replaced
9525     by the sysroot prefix; see `--sysroot' and `-isysroot'.
9526
9527`-fdirectives-only'
9528     When preprocessing, handle directives, but do not expand macros.
9529
9530     The option's behavior depends on the `-E' and `-fpreprocessed'
9531     options.
9532
9533     With `-E', preprocessing is limited to the handling of directives
9534     such as `#define', `#ifdef', and `#error'.  Other preprocessor
9535     operations, such as macro expansion and trigraph conversion are
9536     not performed.  In addition, the `-dD' option is implicitly
9537     enabled.
9538
9539     With `-fpreprocessed', predefinition of command line and most
9540     builtin macros is disabled.  Macros such as `__LINE__', which are
9541     contextually dependent, are handled normally.  This enables
9542     compilation of files previously preprocessed with `-E
9543     -fdirectives-only'.
9544
9545     With both `-E' and `-fpreprocessed', the rules for
9546     `-fpreprocessed' take precedence.  This enables full preprocessing
9547     of files previously preprocessed with `-E -fdirectives-only'.
9548
9549`-fdollars-in-identifiers'
9550     Accept `$' in identifiers.
9551
9552`-fextended-identifiers'
9553     Accept universal character names in identifiers.  This option is
9554     experimental; in a future version of GCC, it will be enabled by
9555     default for C99 and C++.
9556
9557`-fno-canonical-system-headers'
9558     When preprocessing, do not shorten system header paths with
9559     canonicalization.
9560
9561`-fpreprocessed'
9562     Indicate to the preprocessor that the input file has already been
9563     preprocessed.  This suppresses things like macro expansion,
9564     trigraph conversion, escaped newline splicing, and processing of
9565     most directives.  The preprocessor still recognizes and removes
9566     comments, so that you can pass a file preprocessed with `-C' to
9567     the compiler without problems.  In this mode the integrated
9568     preprocessor is little more than a tokenizer for the front ends.
9569
9570     `-fpreprocessed' is implicit if the input file has one of the
9571     extensions `.i', `.ii' or `.mi'.  These are the extensions that
9572     GCC uses for preprocessed files created by `-save-temps'.
9573
9574`-ftabstop=WIDTH'
9575     Set the distance between tab stops.  This helps the preprocessor
9576     report correct column numbers in warnings or errors, even if tabs
9577     appear on the line.  If the value is less than 1 or greater than
9578     100, the option is ignored.  The default is 8.
9579
9580`-fdebug-cpp'
9581     This option is only useful for debugging GCC.  When used with
9582     `-E', dumps debugging information about location maps.  Every
9583     token in the output is preceded by the dump of the map its location
9584     belongs to.  The dump of the map holding the location of a token
9585     would be:
9586          {`P':`/file/path';`F':`/includer/path';`L':LINE_NUM;`C':COL_NUM;`S':SYSTEM_HEADER_P;`M':MAP_ADDRESS;`E':MACRO_EXPANSION_P,`loc':LOCATION}
9587
9588     When used without `-E', this option has no effect.
9589
9590`-ftrack-macro-expansion[=LEVEL]'
9591     Track locations of tokens across macro expansions. This allows the
9592     compiler to emit diagnostic about the current macro expansion stack
9593     when a compilation error occurs in a macro expansion. Using this
9594     option makes the preprocessor and the compiler consume more
9595     memory. The LEVEL parameter can be used to choose the level of
9596     precision of token location tracking thus decreasing the memory
9597     consumption if necessary. Value `0' of LEVEL de-activates this
9598     option just as if no `-ftrack-macro-expansion' was present on the
9599     command line. Value `1' tracks tokens locations in a degraded mode
9600     for the sake of minimal memory overhead. In this mode all tokens
9601     resulting from the expansion of an argument of a function-like
9602     macro have the same location. Value `2' tracks tokens locations
9603     completely. This value is the most memory hungry.  When this
9604     option is given no argument, the default parameter value is `2'.
9605
9606     Note that -ftrack-macro-expansion=2 is activated by default.
9607
9608`-fexec-charset=CHARSET'
9609     Set the execution character set, used for string and character
9610     constants.  The default is UTF-8.  CHARSET can be any encoding
9611     supported by the system's `iconv' library routine.
9612
9613`-fwide-exec-charset=CHARSET'
9614     Set the wide execution character set, used for wide string and
9615     character constants.  The default is UTF-32 or UTF-16, whichever
9616     corresponds to the width of `wchar_t'.  As with `-fexec-charset',
9617     CHARSET can be any encoding supported by the system's `iconv'
9618     library routine; however, you will have problems with encodings
9619     that do not fit exactly in `wchar_t'.
9620
9621`-finput-charset=CHARSET'
9622     Set the input character set, used for translation from the
9623     character set of the input file to the source character set used
9624     by GCC.  If the locale does not specify, or GCC cannot get this
9625     information from the locale, the default is UTF-8.  This can be
9626     overridden by either the locale or this command line option.
9627     Currently the command line option takes precedence if there's a
9628     conflict.  CHARSET can be any encoding supported by the system's
9629     `iconv' library routine.
9630
9631`-fworking-directory'
9632     Enable generation of linemarkers in the preprocessor output that
9633     will let the compiler know the current working directory at the
9634     time of preprocessing.  When this option is enabled, the
9635     preprocessor will emit, after the initial linemarker, a second
9636     linemarker with the current working directory followed by two
9637     slashes.  GCC will use this directory, when it's present in the
9638     preprocessed input, as the directory emitted as the current
9639     working directory in some debugging information formats.  This
9640     option is implicitly enabled if debugging information is enabled,
9641     but this can be inhibited with the negated form
9642     `-fno-working-directory'.  If the `-P' flag is present in the
9643     command line, this option has no effect, since no `#line'
9644     directives are emitted whatsoever.
9645
9646`-fno-show-column'
9647     Do not print column numbers in diagnostics.  This may be necessary
9648     if diagnostics are being scanned by a program that does not
9649     understand the column numbers, such as `dejagnu'.
9650
9651`-A PREDICATE=ANSWER'
9652     Make an assertion with the predicate PREDICATE and answer ANSWER.
9653     This form is preferred to the older form `-A PREDICATE(ANSWER)',
9654     which is still supported, because it does not use shell special
9655     characters.
9656
9657`-A -PREDICATE=ANSWER'
9658     Cancel an assertion with the predicate PREDICATE and answer ANSWER.
9659
9660`-dCHARS'
9661     CHARS is a sequence of one or more of the following characters,
9662     and must not be preceded by a space.  Other characters are
9663     interpreted by the compiler proper, or reserved for future
9664     versions of GCC, and so are silently ignored.  If you specify
9665     characters whose behavior conflicts, the result is undefined.
9666
9667    `M'
9668          Instead of the normal output, generate a list of `#define'
9669          directives for all the macros defined during the execution of
9670          the preprocessor, including predefined macros.  This gives
9671          you a way of finding out what is predefined in your version
9672          of the preprocessor.  Assuming you have no file `foo.h', the
9673          command
9674
9675               touch foo.h; cpp -dM foo.h
9676
9677          will show all the predefined macros.
9678
9679          If you use `-dM' without the `-E' option, `-dM' is
9680          interpreted as a synonym for `-fdump-rtl-mach'.  *Note
9681          Debugging Options: (gcc)Debugging Options.
9682
9683    `D'
9684          Like `M' except in two respects: it does _not_ include the
9685          predefined macros, and it outputs _both_ the `#define'
9686          directives and the result of preprocessing.  Both kinds of
9687          output go to the standard output file.
9688
9689    `N'
9690          Like `D', but emit only the macro names, not their expansions.
9691
9692    `I'
9693          Output `#include' directives in addition to the result of
9694          preprocessing.
9695
9696    `U'
9697          Like `D' except that only macros that are expanded, or whose
9698          definedness is tested in preprocessor directives, are output;
9699          the output is delayed until the use or test of the macro; and
9700          `#undef' directives are also output for macros tested but
9701          undefined at the time.
9702
9703`-P'
9704     Inhibit generation of linemarkers in the output from the
9705     preprocessor.  This might be useful when running the preprocessor
9706     on something that is not C code, and will be sent to a program
9707     which might be confused by the linemarkers.
9708
9709`-C'
9710     Do not discard comments.  All comments are passed through to the
9711     output file, except for comments in processed directives, which
9712     are deleted along with the directive.
9713
9714     You should be prepared for side effects when using `-C'; it causes
9715     the preprocessor to treat comments as tokens in their own right.
9716     For example, comments appearing at the start of what would be a
9717     directive line have the effect of turning that line into an
9718     ordinary source line, since the first token on the line is no
9719     longer a `#'.
9720
9721`-CC'
9722     Do not discard comments, including during macro expansion.  This is
9723     like `-C', except that comments contained within macros are also
9724     passed through to the output file where the macro is expanded.
9725
9726     In addition to the side-effects of the `-C' option, the `-CC'
9727     option causes all C++-style comments inside a macro to be
9728     converted to C-style comments.  This is to prevent later use of
9729     that macro from inadvertently commenting out the remainder of the
9730     source line.
9731
9732     The `-CC' option is generally used to support lint comments.
9733
9734`-traditional-cpp'
9735     Try to imitate the behavior of old-fashioned C preprocessors, as
9736     opposed to ISO C preprocessors.
9737
9738`-trigraphs'
9739     Process trigraph sequences.  These are three-character sequences,
9740     all starting with `??', that are defined by ISO C to stand for
9741     single characters.  For example, `??/' stands for `\', so `'??/n''
9742     is a character constant for a newline.  By default, GCC ignores
9743     trigraphs, but in standard-conforming modes it converts them.  See
9744     the `-std' and `-ansi' options.
9745
9746     The nine trigraphs and their replacements are
9747
9748          Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
9749          Replacement:      [    ]    {    }    #    \    ^    |    ~
9750
9751`-remap'
9752     Enable special code to work around file systems which only permit
9753     very short file names, such as MS-DOS.
9754
9755`--help'
9756`--target-help'
9757     Print text describing all the command line options instead of
9758     preprocessing anything.
9759
9760`-v'
9761     Verbose mode.  Print out GNU CPP's version number at the beginning
9762     of execution, and report the final form of the include path.
9763
9764`-H'
9765     Print the name of each header file used, in addition to other
9766     normal activities.  Each name is indented to show how deep in the
9767     `#include' stack it is.  Precompiled header files are also
9768     printed, even if they are found to be invalid; an invalid
9769     precompiled header file is printed with `...x' and a valid one
9770     with `...!' .
9771
9772`-version'
9773`--version'
9774     Print out GNU CPP's version number.  With one dash, proceed to
9775     preprocess as normal.  With two dashes, exit immediately.
9776
9777
9778File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
9779
97803.12 Passing Options to the Assembler
9781=====================================
9782
9783You can pass options to the assembler.
9784
9785`-Wa,OPTION'
9786     Pass OPTION as an option to the assembler.  If OPTION contains
9787     commas, it is split into multiple options at the commas.
9788
9789`-Xassembler OPTION'
9790     Pass OPTION as an option to the assembler.  You can use this to
9791     supply system-specific assembler options that GCC does not
9792     recognize.
9793
9794     If you want to pass an option that takes an argument, you must use
9795     `-Xassembler' twice, once for the option and once for the argument.
9796
9797
9798
9799File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
9800
98013.13 Options for Linking
9802========================
9803
9804These options come into play when the compiler links object files into
9805an executable output file.  They are meaningless if the compiler is not
9806doing a link step.
9807
9808`OBJECT-FILE-NAME'
9809     A file name that does not end in a special recognized suffix is
9810     considered to name an object file or library.  (Object files are
9811     distinguished from libraries by the linker according to the file
9812     contents.)  If linking is done, these object files are used as
9813     input to the linker.
9814
9815`-c'
9816`-S'
9817`-E'
9818     If any of these options is used, then the linker is not run, and
9819     object file names should not be used as arguments.  *Note Overall
9820     Options::.
9821
9822`-lLIBRARY'
9823`-l LIBRARY'
9824     Search the library named LIBRARY when linking.  (The second
9825     alternative with the library as a separate argument is only for
9826     POSIX compliance and is not recommended.)
9827
9828     It makes a difference where in the command you write this option;
9829     the linker searches and processes libraries and object files in
9830     the order they are specified.  Thus, `foo.o -lz bar.o' searches
9831     library `z' after file `foo.o' but before `bar.o'.  If `bar.o'
9832     refers to functions in `z', those functions may not be loaded.
9833
9834     The linker searches a standard list of directories for the library,
9835     which is actually a file named `libLIBRARY.a'.  The linker then
9836     uses this file as if it had been specified precisely by name.
9837
9838     The directories searched include several standard system
9839     directories plus any that you specify with `-L'.
9840
9841     Normally the files found this way are library files--archive files
9842     whose members are object files.  The linker handles an archive
9843     file by scanning through it for members which define symbols that
9844     have so far been referenced but not defined.  But if the file that
9845     is found is an ordinary object file, it is linked in the usual
9846     fashion.  The only difference between using an `-l' option and
9847     specifying a file name is that `-l' surrounds LIBRARY with `lib'
9848     and `.a' and searches several directories.
9849
9850`-lobjc'
9851     You need this special case of the `-l' option in order to link an
9852     Objective-C or Objective-C++ program.
9853
9854`-nostartfiles'
9855     Do not use the standard system startup files when linking.  The
9856     standard system libraries are used normally, unless `-nostdlib' or
9857     `-nodefaultlibs' is used.
9858
9859`-nodefaultlibs'
9860     Do not use the standard system libraries when linking.  Only the
9861     libraries you specify are passed to the linker, and options
9862     specifying linkage of the system libraries, such as
9863     `-static-libgcc' or `-shared-libgcc', are ignored.  The standard
9864     startup files are used normally, unless `-nostartfiles' is used.
9865
9866     The compiler may generate calls to `memcmp', `memset', `memcpy'
9867     and `memmove'.  These entries are usually resolved by entries in
9868     libc.  These entry points should be supplied through some other
9869     mechanism when this option is specified.
9870
9871`-nostdlib'
9872     Do not use the standard system startup files or libraries when
9873     linking.  No startup files and only the libraries you specify are
9874     passed to the linker, and options specifying linkage of the system
9875     libraries, such as `-static-libgcc' or `-shared-libgcc', are
9876     ignored.
9877
9878     The compiler may generate calls to `memcmp', `memset', `memcpy'
9879     and `memmove'.  These entries are usually resolved by entries in
9880     libc.  These entry points should be supplied through some other
9881     mechanism when this option is specified.
9882
9883     One of the standard libraries bypassed by `-nostdlib' and
9884     `-nodefaultlibs' is `libgcc.a', a library of internal subroutines
9885     which GCC uses to overcome shortcomings of particular machines, or
9886     special needs for some languages.  (*Note Interfacing to GCC
9887     Output: (gccint)Interface, for more discussion of `libgcc.a'.)  In
9888     most cases, you need `libgcc.a' even when you want to avoid other
9889     standard libraries.  In other words, when you specify `-nostdlib'
9890     or `-nodefaultlibs' you should usually specify `-lgcc' as well.
9891     This ensures that you have no unresolved references to internal GCC
9892     library subroutines.  (An example of such an internal subroutine
9893     is `__main', used to ensure C++ constructors are called; *note
9894     `collect2': (gccint)Collect2.)
9895
9896`-pie'
9897     Produce a position independent executable on targets that support
9898     it.  For predictable results, you must also specify the same set
9899     of options used for compilation (`-fpie', `-fPIE', or model
9900     suboptions) when you specify this linker option.
9901
9902`-rdynamic'
9903     Pass the flag `-export-dynamic' to the ELF linker, on targets that
9904     support it. This instructs the linker to add all symbols, not only
9905     used ones, to the dynamic symbol table. This option is needed for
9906     some uses of `dlopen' or to allow obtaining backtraces from within
9907     a program.
9908
9909`-s'
9910     Remove all symbol table and relocation information from the
9911     executable.
9912
9913`-static'
9914     On systems that support dynamic linking, this prevents linking
9915     with the shared libraries.  On other systems, this option has no
9916     effect.
9917
9918`-shared'
9919     Produce a shared object which can then be linked with other
9920     objects to form an executable.  Not all systems support this
9921     option.  For predictable results, you must also specify the same
9922     set of options used for compilation (`-fpic', `-fPIC', or model
9923     suboptions) when you specify this linker option.(1)
9924
9925`-shared-libgcc'
9926`-static-libgcc'
9927     On systems that provide `libgcc' as a shared library, these options
9928     force the use of either the shared or static version, respectively.
9929     If no shared version of `libgcc' was built when the compiler was
9930     configured, these options have no effect.
9931
9932     There are several situations in which an application should use the
9933     shared `libgcc' instead of the static version.  The most common of
9934     these is when the application wishes to throw and catch exceptions
9935     across different shared libraries.  In that case, each of the
9936     libraries as well as the application itself should use the shared
9937     `libgcc'.
9938
9939     Therefore, the G++ and GCJ drivers automatically add
9940     `-shared-libgcc' whenever you build a shared library or a main
9941     executable, because C++ and Java programs typically use
9942     exceptions, so this is the right thing to do.
9943
9944     If, instead, you use the GCC driver to create shared libraries,
9945     you may find that they are not always linked with the shared
9946     `libgcc'.  If GCC finds, at its configuration time, that you have
9947     a non-GNU linker or a GNU linker that does not support option
9948     `--eh-frame-hdr', it links the shared version of `libgcc' into
9949     shared libraries by default.  Otherwise, it takes advantage of the
9950     linker and optimizes away the linking with the shared version of
9951     `libgcc', linking with the static version of libgcc by default.
9952     This allows exceptions to propagate through such shared libraries,
9953     without incurring relocation costs at library load time.
9954
9955     However, if a library or main executable is supposed to throw or
9956     catch exceptions, you must link it using the G++ or GCJ driver, as
9957     appropriate for the languages used in the program, or using the
9958     option `-shared-libgcc', such that it is linked with the shared
9959     `libgcc'.
9960
9961`-static-libasan'
9962     When the `-fsanitize=address' option is used to link a program,
9963     the GCC driver automatically links against `libasan'.  If
9964     `libasan' is available as a shared library, and the `-static'
9965     option is not used, then this links against the shared version of
9966     `libasan'.  The `-static-libasan' option directs the GCC driver to
9967     link `libasan' statically, without necessarily linking other
9968     libraries statically.
9969
9970`-static-libtsan'
9971     When the `-fsanitize=thread' option is used to link a program, the
9972     GCC driver automatically links against `libtsan'.  If `libtsan' is
9973     available as a shared library, and the `-static' option is not
9974     used, then this links against the shared version of `libtsan'.
9975     The `-static-libtsan' option directs the GCC driver to link
9976     `libtsan' statically, without necessarily linking other libraries
9977     statically.
9978
9979`-static-libstdc++'
9980     When the `g++' program is used to link a C++ program, it normally
9981     automatically links against `libstdc++'.  If `libstdc++' is
9982     available as a shared library, and the `-static' option is not
9983     used, then this links against the shared version of `libstdc++'.
9984     That is normally fine.  However, it is sometimes useful to freeze
9985     the version of `libstdc++' used by the program without going all
9986     the way to a fully static link.  The `-static-libstdc++' option
9987     directs the `g++' driver to link `libstdc++' statically, without
9988     necessarily linking other libraries statically.
9989
9990`-symbolic'
9991     Bind references to global symbols when building a shared object.
9992     Warn about any unresolved references (unless overridden by the
9993     link editor option `-Xlinker -z -Xlinker defs').  Only a few
9994     systems support this option.
9995
9996`-T SCRIPT'
9997     Use SCRIPT as the linker script.  This option is supported by most
9998     systems using the GNU linker.  On some targets, such as bare-board
9999     targets without an operating system, the `-T' option may be
10000     required when linking to avoid references to undefined symbols.
10001
10002`-Xlinker OPTION'
10003     Pass OPTION as an option to the linker.  You can use this to
10004     supply system-specific linker options that GCC does not recognize.
10005
10006     If you want to pass an option that takes a separate argument, you
10007     must use `-Xlinker' twice, once for the option and once for the
10008     argument.  For example, to pass `-assert definitions', you must
10009     write `-Xlinker -assert -Xlinker definitions'.  It does not work
10010     to write `-Xlinker "-assert definitions"', because this passes the
10011     entire string as a single argument, which is not what the linker
10012     expects.
10013
10014     When using the GNU linker, it is usually more convenient to pass
10015     arguments to linker options using the `OPTION=VALUE' syntax than
10016     as separate arguments.  For example, you can specify `-Xlinker
10017     -Map=output.map' rather than `-Xlinker -Map -Xlinker output.map'.
10018     Other linkers may not support this syntax for command-line options.
10019
10020`-Wl,OPTION'
10021     Pass OPTION as an option to the linker.  If OPTION contains
10022     commas, it is split into multiple options at the commas.  You can
10023     use this syntax to pass an argument to the option.  For example,
10024     `-Wl,-Map,output.map' passes `-Map output.map' to the linker.
10025     When using the GNU linker, you can also get the same effect with
10026     `-Wl,-Map=output.map'.
10027
10028`-u SYMBOL'
10029     Pretend the symbol SYMBOL is undefined, to force linking of
10030     library modules to define it.  You can use `-u' multiple times with
10031     different symbols to force loading of additional library modules.
10032
10033 ---------- Footnotes ----------
10034
10035 (1) On some systems, `gcc -shared' needs to build supplementary stub
10036code for constructors to work.  On multi-libbed systems, `gcc -shared'
10037must select the correct support libraries to link against.  Failing to
10038supply the correct flags may lead to subtle defects.  Supplying them in
10039cases where they are not necessary is innocuous.
10040
10041
10042File: gcc.info,  Node: Directory Options,  Next: Spec Files,  Prev: Link Options,  Up: Invoking GCC
10043
100443.14 Options for Directory Search
10045=================================
10046
10047These options specify directories to search for header files, for
10048libraries and for parts of the compiler:
10049
10050`-IDIR'
10051     Add the directory DIR to the head of the list of directories to be
10052     searched for header files.  This can be used to override a system
10053     header file, substituting your own version, since these
10054     directories are searched before the system header file
10055     directories.  However, you should not use this option to add
10056     directories that contain vendor-supplied system header files (use
10057     `-isystem' for that).  If you use more than one `-I' option, the
10058     directories are scanned in left-to-right order; the standard
10059     system directories come after.
10060
10061     If a standard system include directory, or a directory specified
10062     with `-isystem', is also specified with `-I', the `-I' option is
10063     ignored.  The directory is still searched but as a system
10064     directory at its normal position in the system include chain.
10065     This is to ensure that GCC's procedure to fix buggy system headers
10066     and the ordering for the `include_next' directive are not
10067     inadvertently changed.  If you really need to change the search
10068     order for system directories, use the `-nostdinc' and/or
10069     `-isystem' options.
10070
10071`-iplugindir=DIR'
10072     Set the directory to search for plugins that are passed by
10073     `-fplugin=NAME' instead of `-fplugin=PATH/NAME.so'.  This option
10074     is not meant to be used by the user, but only passed by the driver.
10075
10076`-iquoteDIR'
10077     Add the directory DIR to the head of the list of directories to be
10078     searched for header files only for the case of `#include "FILE"';
10079     they are not searched for `#include <FILE>', otherwise just like
10080     `-I'.
10081
10082`-LDIR'
10083     Add directory DIR to the list of directories to be searched for
10084     `-l'.
10085
10086`-BPREFIX'
10087     This option specifies where to find the executables, libraries,
10088     include files, and data files of the compiler itself.
10089
10090     The compiler driver program runs one or more of the subprograms
10091     `cpp', `cc1', `as' and `ld'.  It tries PREFIX as a prefix for each
10092     program it tries to run, both with and without `MACHINE/VERSION/'
10093     (*note Target Options::).
10094
10095     For each subprogram to be run, the compiler driver first tries the
10096     `-B' prefix, if any.  If that name is not found, or if `-B' is not
10097     specified, the driver tries two standard prefixes, `/usr/lib/gcc/'
10098     and `/usr/local/lib/gcc/'.  If neither of those results in a file
10099     name that is found, the unmodified program name is searched for
10100     using the directories specified in your `PATH' environment
10101     variable.
10102
10103     The compiler checks to see if the path provided by the `-B' refers
10104     to a directory, and if necessary it adds a directory separator
10105     character at the end of the path.
10106
10107     `-B' prefixes that effectively specify directory names also apply
10108     to libraries in the linker, because the compiler translates these
10109     options into `-L' options for the linker.  They also apply to
10110     includes files in the preprocessor, because the compiler
10111     translates these options into `-isystem' options for the
10112     preprocessor.  In this case, the compiler appends `include' to the
10113     prefix.
10114
10115     The runtime support file `libgcc.a' can also be searched for using
10116     the `-B' prefix, if needed.  If it is not found there, the two
10117     standard prefixes above are tried, and that is all.  The file is
10118     left out of the link if it is not found by those means.
10119
10120     Another way to specify a prefix much like the `-B' prefix is to use
10121     the environment variable `GCC_EXEC_PREFIX'.  *Note Environment
10122     Variables::.
10123
10124     As a special kludge, if the path provided by `-B' is
10125     `[dir/]stageN/', where N is a number in the range 0 to 9, then it
10126     is replaced by `[dir/]include'.  This is to help with
10127     boot-strapping the compiler.
10128
10129`-specs=FILE'
10130     Process FILE after the compiler reads in the standard `specs'
10131     file, in order to override the defaults which the `gcc' driver
10132     program uses when determining what switches to pass to `cc1',
10133     `cc1plus', `as', `ld', etc.  More than one `-specs=FILE' can be
10134     specified on the command line, and they are processed in order,
10135     from left to right.
10136
10137`--sysroot=DIR'
10138     Use DIR as the logical root directory for headers and libraries.
10139     For example, if the compiler normally searches for headers in
10140     `/usr/include' and libraries in `/usr/lib', it instead searches
10141     `DIR/usr/include' and `DIR/usr/lib'.
10142
10143     If you use both this option and the `-isysroot' option, then the
10144     `--sysroot' option applies to libraries, but the `-isysroot'
10145     option applies to header files.
10146
10147     The GNU linker (beginning with version 2.16) has the necessary
10148     support for this option.  If your linker does not support this
10149     option, the header file aspect of `--sysroot' still works, but the
10150     library aspect does not.
10151
10152`--no-sysroot-suffix'
10153     For some targets, a suffix is added to the root directory specified
10154     with `--sysroot', depending on the other options used, so that
10155     headers may for example be found in `DIR/SUFFIX/usr/include'
10156     instead of `DIR/usr/include'.  This option disables the addition of
10157     such a suffix.
10158
10159`-I-'
10160     This option has been deprecated.  Please use `-iquote' instead for
10161     `-I' directories before the `-I-' and remove the `-I-'.  Any
10162     directories you specify with `-I' options before the `-I-' option
10163     are searched only for the case of `#include "FILE"'; they are not
10164     searched for `#include <FILE>'.
10165
10166     If additional directories are specified with `-I' options after
10167     the `-I-', these directories are searched for all `#include'
10168     directives.  (Ordinarily _all_ `-I' directories are used this way.)
10169
10170     In addition, the `-I-' option inhibits the use of the current
10171     directory (where the current input file came from) as the first
10172     search directory for `#include "FILE"'.  There is no way to
10173     override this effect of `-I-'.  With `-I.' you can specify
10174     searching the directory that is current when the compiler is
10175     invoked.  That is not exactly the same as what the preprocessor
10176     does by default, but it is often satisfactory.
10177
10178     `-I-' does not inhibit the use of the standard system directories
10179     for header files.  Thus, `-I-' and `-nostdinc' are independent.
10180
10181
10182File: gcc.info,  Node: Spec Files,  Next: Target Options,  Prev: Directory Options,  Up: Invoking GCC
10183
101843.15 Specifying subprocesses and the switches to pass to them
10185=============================================================
10186
10187`gcc' is a driver program.  It performs its job by invoking a sequence
10188of other programs to do the work of compiling, assembling and linking.
10189GCC interprets its command-line parameters and uses these to deduce
10190which programs it should invoke, and which command-line options it
10191ought to place on their command lines.  This behavior is controlled by
10192"spec strings".  In most cases there is one spec string for each
10193program that GCC can invoke, but a few programs have multiple spec
10194strings to control their behavior.  The spec strings built into GCC can
10195be overridden by using the `-specs=' command-line switch to specify a
10196spec file.
10197
10198 "Spec files" are plaintext files that are used to construct spec
10199strings.  They consist of a sequence of directives separated by blank
10200lines.  The type of directive is determined by the first non-whitespace
10201character on the line, which can be one of the following:
10202
10203`%COMMAND'
10204     Issues a COMMAND to the spec file processor.  The commands that can
10205     appear here are:
10206
10207    `%include <FILE>'
10208          Search for FILE and insert its text at the current point in
10209          the specs file.
10210
10211    `%include_noerr <FILE>'
10212          Just like `%include', but do not generate an error message if
10213          the include file cannot be found.
10214
10215    `%rename OLD_NAME NEW_NAME'
10216          Rename the spec string OLD_NAME to NEW_NAME.
10217
10218
10219`*[SPEC_NAME]:'
10220     This tells the compiler to create, override or delete the named
10221     spec string.  All lines after this directive up to the next
10222     directive or blank line are considered to be the text for the spec
10223     string.  If this results in an empty string then the spec is
10224     deleted.  (Or, if the spec did not exist, then nothing happens.)
10225     Otherwise, if the spec does not currently exist a new spec is
10226     created.  If the spec does exist then its contents are overridden
10227     by the text of this directive, unless the first character of that
10228     text is the `+' character, in which case the text is appended to
10229     the spec.
10230
10231`[SUFFIX]:'
10232     Creates a new `[SUFFIX] spec' pair.  All lines after this directive
10233     and up to the next directive or blank line are considered to make
10234     up the spec string for the indicated suffix.  When the compiler
10235     encounters an input file with the named suffix, it processes the
10236     spec string in order to work out how to compile that file.  For
10237     example:
10238
10239          .ZZ:
10240          z-compile -input %i
10241
10242     This says that any input file whose name ends in `.ZZ' should be
10243     passed to the program `z-compile', which should be invoked with the
10244     command-line switch `-input' and with the result of performing the
10245     `%i' substitution.  (See below.)
10246
10247     As an alternative to providing a spec string, the text following a
10248     suffix directive can be one of the following:
10249
10250    `@LANGUAGE'
10251          This says that the suffix is an alias for a known LANGUAGE.
10252          This is similar to using the `-x' command-line switch to GCC
10253          to specify a language explicitly.  For example:
10254
10255               .ZZ:
10256               @c++
10257
10258          Says that .ZZ files are, in fact, C++ source files.
10259
10260    `#NAME'
10261          This causes an error messages saying:
10262
10263               NAME compiler not installed on this system.
10264
10265     GCC already has an extensive list of suffixes built into it.  This
10266     directive adds an entry to the end of the list of suffixes, but
10267     since the list is searched from the end backwards, it is
10268     effectively possible to override earlier entries using this
10269     technique.
10270
10271
10272 GCC has the following spec strings built into it.  Spec files can
10273override these strings or create their own.  Note that individual
10274targets can also add their own spec strings to this list.
10275
10276     asm          Options to pass to the assembler
10277     asm_final    Options to pass to the assembler post-processor
10278     cpp          Options to pass to the C preprocessor
10279     cc1          Options to pass to the C compiler
10280     cc1plus      Options to pass to the C++ compiler
10281     endfile      Object files to include at the end of the link
10282     link         Options to pass to the linker
10283     lib          Libraries to include on the command line to the linker
10284     libgcc       Decides which GCC support library to pass to the linker
10285     linker       Sets the name of the linker
10286     predefines   Defines to be passed to the C preprocessor
10287     signed_char  Defines to pass to CPP to say whether `char' is signed
10288                  by default
10289     startfile    Object files to include at the start of the link
10290
10291 Here is a small example of a spec file:
10292
10293     %rename lib                 old_lib
10294
10295     *lib:
10296     --start-group -lgcc -lc -leval1 --end-group %(old_lib)
10297
10298 This example renames the spec called `lib' to `old_lib' and then
10299overrides the previous definition of `lib' with a new one.  The new
10300definition adds in some extra command-line options before including the
10301text of the old definition.
10302
10303 "Spec strings" are a list of command-line options to be passed to their
10304corresponding program.  In addition, the spec strings can contain
10305`%'-prefixed sequences to substitute variable text or to conditionally
10306insert text into the command line.  Using these constructs it is
10307possible to generate quite complex command lines.
10308
10309 Here is a table of all defined `%'-sequences for spec strings.  Note
10310that spaces are not generated automatically around the results of
10311expanding these sequences.  Therefore you can concatenate them together
10312or combine them with constant text in a single argument.
10313
10314`%%'
10315     Substitute one `%' into the program name or argument.
10316
10317`%i'
10318     Substitute the name of the input file being processed.
10319
10320`%b'
10321     Substitute the basename of the input file being processed.  This
10322     is the substring up to (and not including) the last period and not
10323     including the directory.
10324
10325`%B'
10326     This is the same as `%b', but include the file suffix (text after
10327     the last period).
10328
10329`%d'
10330     Marks the argument containing or following the `%d' as a temporary
10331     file name, so that that file is deleted if GCC exits successfully.
10332     Unlike `%g', this contributes no text to the argument.
10333
10334`%gSUFFIX'
10335     Substitute a file name that has suffix SUFFIX and is chosen once
10336     per compilation, and mark the argument in the same way as `%d'.
10337     To reduce exposure to denial-of-service attacks, the file name is
10338     now chosen in a way that is hard to predict even when previously
10339     chosen file names are known.  For example, `%g.s ... %g.o ... %g.s'
10340     might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX
10341     matches the regexp `[.A-Za-z]*' or the special string `%O', which
10342     is treated exactly as if `%O' had been preprocessed.  Previously,
10343     `%g' was simply substituted with a file name chosen once per
10344     compilation, without regard to any appended suffix (which was
10345     therefore treated just like ordinary text), making such attacks
10346     more likely to succeed.
10347
10348`%uSUFFIX'
10349     Like `%g', but generates a new temporary file name each time it
10350     appears instead of once per compilation.
10351
10352`%USUFFIX'
10353     Substitutes the last file name generated with `%uSUFFIX',
10354     generating a new one if there is no such last file name.  In the
10355     absence of any `%uSUFFIX', this is just like `%gSUFFIX', except
10356     they don't share the same suffix _space_, so `%g.s ... %U.s ...
10357     %g.s ... %U.s' involves the generation of two distinct file names,
10358     one for each `%g.s' and another for each `%U.s'.  Previously, `%U'
10359     was simply substituted with a file name chosen for the previous
10360     `%u', without regard to any appended suffix.
10361
10362`%jSUFFIX'
10363     Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is
10364     writable, and if `-save-temps' is not used; otherwise, substitute
10365     the name of a temporary file, just like `%u'.  This temporary file
10366     is not meant for communication between processes, but rather as a
10367     junk disposal mechanism.
10368
10369`%|SUFFIX'
10370`%mSUFFIX'
10371     Like `%g', except if `-pipe' is in effect.  In that case `%|'
10372     substitutes a single dash and `%m' substitutes nothing at all.
10373     These are the two most common ways to instruct a program that it
10374     should read from standard input or write to standard output.  If
10375     you need something more elaborate you can use an `%{pipe:`X'}'
10376     construct: see for example `f/lang-specs.h'.
10377
10378`%.SUFFIX'
10379     Substitutes .SUFFIX for the suffixes of a matched switch's args
10380     when it is subsequently output with `%*'.  SUFFIX is terminated by
10381     the next space or %.
10382
10383`%w'
10384     Marks the argument containing or following the `%w' as the
10385     designated output file of this compilation.  This puts the argument
10386     into the sequence of arguments that `%o' substitutes.
10387
10388`%o'
10389     Substitutes the names of all the output files, with spaces
10390     automatically placed around them.  You should write spaces around
10391     the `%o' as well or the results are undefined.  `%o' is for use in
10392     the specs for running the linker.  Input files whose names have no
10393     recognized suffix are not compiled at all, but they are included
10394     among the output files, so they are linked.
10395
10396`%O'
10397     Substitutes the suffix for object files.  Note that this is
10398     handled specially when it immediately follows `%g, %u, or %U',
10399     because of the need for those to form complete file names.  The
10400     handling is such that `%O' is treated exactly as if it had already
10401     been substituted, except that `%g, %u, and %U' do not currently
10402     support additional SUFFIX characters following `%O' as they do
10403     following, for example, `.o'.
10404
10405`%p'
10406     Substitutes the standard macro predefinitions for the current
10407     target machine.  Use this when running `cpp'.
10408
10409`%P'
10410     Like `%p', but puts `__' before and after the name of each
10411     predefined macro, except for macros that start with `__' or with
10412     `_L', where L is an uppercase letter.  This is for ISO C.
10413
10414`%I'
10415     Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'),
10416     `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made
10417     from `COMPILER_PATH' and `-B' options) and `-imultilib' as
10418     necessary.
10419
10420`%s'
10421     Current argument is the name of a library or startup file of some
10422     sort.  Search for that file in a standard list of directories and
10423     substitute the full name found.  The current working directory is
10424     included in the list of directories scanned.
10425
10426`%T'
10427     Current argument is the name of a linker script.  Search for that
10428     file in the current list of directories to scan for libraries. If
10429     the file is located insert a `--script' option into the command
10430     line followed by the full path name found.  If the file is not
10431     found then generate an error message.  Note: the current working
10432     directory is not searched.
10433
10434`%eSTR'
10435     Print STR as an error message.  STR is terminated by a newline.
10436     Use this when inconsistent options are detected.
10437
10438`%(NAME)'
10439     Substitute the contents of spec string NAME at this point.
10440
10441`%x{OPTION}'
10442     Accumulate an option for `%X'.
10443
10444`%X'
10445     Output the accumulated linker options specified by `-Wl' or a `%x'
10446     spec string.
10447
10448`%Y'
10449     Output the accumulated assembler options specified by `-Wa'.
10450
10451`%Z'
10452     Output the accumulated preprocessor options specified by `-Wp'.
10453
10454`%a'
10455     Process the `asm' spec.  This is used to compute the switches to
10456     be passed to the assembler.
10457
10458`%A'
10459     Process the `asm_final' spec.  This is a spec string for passing
10460     switches to an assembler post-processor, if such a program is
10461     needed.
10462
10463`%l'
10464     Process the `link' spec.  This is the spec for computing the
10465     command line passed to the linker.  Typically it makes use of the
10466     `%L %G %S %D and %E' sequences.
10467
10468`%D'
10469     Dump out a `-L' option for each directory that GCC believes might
10470     contain startup files.  If the target supports multilibs then the
10471     current multilib directory is prepended to each of these paths.
10472
10473`%L'
10474     Process the `lib' spec.  This is a spec string for deciding which
10475     libraries are included on the command line to the linker.
10476
10477`%G'
10478     Process the `libgcc' spec.  This is a spec string for deciding
10479     which GCC support library is included on the command line to the
10480     linker.
10481
10482`%S'
10483     Process the `startfile' spec.  This is a spec for deciding which
10484     object files are the first ones passed to the linker.  Typically
10485     this might be a file named `crt0.o'.
10486
10487`%E'
10488     Process the `endfile' spec.  This is a spec string that specifies
10489     the last object files that are passed to the linker.
10490
10491`%C'
10492     Process the `cpp' spec.  This is used to construct the arguments
10493     to be passed to the C preprocessor.
10494
10495`%1'
10496     Process the `cc1' spec.  This is used to construct the options to
10497     be passed to the actual C compiler (`cc1').
10498
10499`%2'
10500     Process the `cc1plus' spec.  This is used to construct the options
10501     to be passed to the actual C++ compiler (`cc1plus').
10502
10503`%*'
10504     Substitute the variable part of a matched option.  See below.
10505     Note that each comma in the substituted string is replaced by a
10506     single space.
10507
10508`%<`S''
10509     Remove all occurrences of `-S' from the command line.  Note--this
10510     command is position dependent.  `%' commands in the spec string
10511     before this one see `-S', `%' commands in the spec string after
10512     this one do not.
10513
10514`%:FUNCTION(ARGS)'
10515     Call the named function FUNCTION, passing it ARGS.  ARGS is first
10516     processed as a nested spec string, then split into an argument
10517     vector in the usual fashion.  The function returns a string which
10518     is processed as if it had appeared literally as part of the
10519     current spec.
10520
10521     The following built-in spec functions are provided:
10522
10523    ``getenv''
10524          The `getenv' spec function takes two arguments: an environment
10525          variable name and a string.  If the environment variable is
10526          not defined, a fatal error is issued.  Otherwise, the return
10527          value is the value of the environment variable concatenated
10528          with the string.  For example, if `TOPDIR' is defined as
10529          `/path/to/top', then:
10530
10531               %:getenv(TOPDIR /include)
10532
10533          expands to `/path/to/top/include'.
10534
10535    ``if-exists''
10536          The `if-exists' spec function takes one argument, an absolute
10537          pathname to a file.  If the file exists, `if-exists' returns
10538          the pathname.  Here is a small example of its usage:
10539
10540               *startfile:
10541               crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
10542
10543    ``if-exists-else''
10544          The `if-exists-else' spec function is similar to the
10545          `if-exists' spec function, except that it takes two
10546          arguments.  The first argument is an absolute pathname to a
10547          file.  If the file exists, `if-exists-else' returns the
10548          pathname.  If it does not exist, it returns the second
10549          argument.  This way, `if-exists-else' can be used to select
10550          one file or another, based on the existence of the first.
10551          Here is a small example of its usage:
10552
10553               *startfile:
10554               crt0%O%s %:if-exists(crti%O%s) \
10555               %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
10556
10557    ``replace-outfile''
10558          The `replace-outfile' spec function takes two arguments.  It
10559          looks for the first argument in the outfiles array and
10560          replaces it with the second argument.  Here is a small
10561          example of its usage:
10562
10563               %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
10564
10565    ``remove-outfile''
10566          The `remove-outfile' spec function takes one argument.  It
10567          looks for the first argument in the outfiles array and
10568          removes it.  Here is a small example its usage:
10569
10570               %:remove-outfile(-lm)
10571
10572    ``pass-through-libs''
10573          The `pass-through-libs' spec function takes any number of
10574          arguments.  It finds any `-l' options and any non-options
10575          ending in `.a' (which it assumes are the names of linker
10576          input library archive files) and returns a result containing
10577          all the found arguments each prepended by
10578          `-plugin-opt=-pass-through=' and joined by spaces.  This list
10579          is intended to be passed to the LTO linker plugin.
10580
10581               %:pass-through-libs(%G %L %G)
10582
10583    ``print-asm-header''
10584          The `print-asm-header' function takes no arguments and simply
10585          prints a banner like:
10586
10587               Assembler options
10588               =================
10589
10590               Use "-Wa,OPTION" to pass "OPTION" to the assembler.
10591
10592          It is used to separate compiler options from assembler options
10593          in the `--target-help' output.
10594
10595`%{`S'}'
10596     Substitutes the `-S' switch, if that switch is given to GCC.  If
10597     that switch is not specified, this substitutes nothing.  Note that
10598     the leading dash is omitted when specifying this option, and it is
10599     automatically inserted if the substitution is performed.  Thus the
10600     spec string `%{foo}' matches the command-line option `-foo' and
10601     outputs the command-line option `-foo'.
10602
10603`%W{`S'}'
10604     Like %{`S'} but mark last argument supplied within as a file to be
10605     deleted on failure.
10606
10607`%{`S'*}'
10608     Substitutes all the switches specified to GCC whose names start
10609     with `-S', but which also take an argument.  This is used for
10610     switches like `-o', `-D', `-I', etc.  GCC considers `-o foo' as
10611     being one switch whose name starts with `o'.  %{o*} substitutes
10612     this text, including the space.  Thus two arguments are generated.
10613
10614`%{`S'*&`T'*}'
10615     Like %{`S'*}, but preserve order of `S' and `T' options (the order
10616     of `S' and `T' in the spec is not significant).  There can be any
10617     number of ampersand-separated variables; for each the wild card is
10618     optional.  Useful for CPP as `%{D*&U*&A*}'.
10619
10620`%{`S':`X'}'
10621     Substitutes `X', if the `-S' switch is given to GCC.
10622
10623`%{!`S':`X'}'
10624     Substitutes `X', if the `-S' switch is _not_ given to GCC.
10625
10626`%{`S'*:`X'}'
10627     Substitutes `X' if one or more switches whose names start with
10628     `-S' are specified to GCC.  Normally `X' is substituted only once,
10629     no matter how many such switches appeared.  However, if `%*'
10630     appears somewhere in `X', then `X' is substituted once for each
10631     matching switch, with the `%*' replaced by the part of that switch
10632     matching the `*'.
10633
10634`%{.`S':`X'}'
10635     Substitutes `X', if processing a file with suffix `S'.
10636
10637`%{!.`S':`X'}'
10638     Substitutes `X', if _not_ processing a file with suffix `S'.
10639
10640`%{,`S':`X'}'
10641     Substitutes `X', if processing a file for language `S'.
10642
10643`%{!,`S':`X'}'
10644     Substitutes `X', if not processing a file for language `S'.
10645
10646`%{`S'|`P':`X'}'
10647     Substitutes `X' if either `-S' or `-P' is given to GCC.  This may
10648     be combined with `!', `.', `,', and `*' sequences as well,
10649     although they have a stronger binding than the `|'.  If `%*'
10650     appears in `X', all of the alternatives must be starred, and only
10651     the first matching alternative is substituted.
10652
10653     For example, a spec string like this:
10654
10655          %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
10656
10657     outputs the following command-line options from the following input
10658     command-line options:
10659
10660          fred.c        -foo -baz
10661          jim.d         -bar -boggle
10662          -d fred.c     -foo -baz -boggle
10663          -d jim.d      -bar -baz -boggle
10664
10665`%{S:X; T:Y; :D}'
10666     If `S' is given to GCC, substitutes `X'; else if `T' is given to
10667     GCC, substitutes `Y'; else substitutes `D'.  There can be as many
10668     clauses as you need.  This may be combined with `.', `,', `!',
10669     `|', and `*' as needed.
10670
10671
10672 The conditional text `X' in a %{`S':`X'} or similar construct may
10673contain other nested `%' constructs or spaces, or even newlines.  They
10674are processed as usual, as described above.  Trailing white space in
10675`X' is ignored.  White space may also appear anywhere on the left side
10676of the colon in these constructs, except between `.' or `*' and the
10677corresponding word.
10678
10679 The `-O', `-f', `-m', and `-W' switches are handled specifically in
10680these constructs.  If another value of `-O' or the negated form of a
10681`-f', `-m', or `-W' switch is found later in the command line, the
10682earlier switch value is ignored, except with {`S'*} where `S' is just
10683one letter, which passes all matching options.
10684
10685 The character `|' at the beginning of the predicate text is used to
10686indicate that a command should be piped to the following command, but
10687only if `-pipe' is specified.
10688
10689 It is built into GCC which switches take arguments and which do not.
10690(You might think it would be useful to generalize this to allow each
10691compiler's spec to say which switches take arguments.  But this cannot
10692be done in a consistent fashion.  GCC cannot even decide which input
10693files have been specified without knowing which switches take arguments,
10694and it must know which input files to compile in order to tell which
10695compilers to run).
10696
10697 GCC also knows implicitly that arguments starting in `-l' are to be
10698treated as compiler output files, and passed to the linker in their
10699proper position among the other output files.
10700
10701
10702File: gcc.info,  Node: Target Options,  Next: Submodel Options,  Prev: Spec Files,  Up: Invoking GCC
10703
107043.16 Specifying Target Machine and Compiler Version
10705===================================================
10706
10707The usual way to run GCC is to run the executable called `gcc', or
10708`MACHINE-gcc' when cross-compiling, or `MACHINE-gcc-VERSION' to run a
10709version other than the one that was installed last.
10710
10711
10712File: gcc.info,  Node: Submodel Options,  Next: Code Gen Options,  Prev: Target Options,  Up: Invoking GCC
10713
107143.17 Hardware Models and Configurations
10715=======================================
10716
10717Each target machine types can have its own special options, starting
10718with `-m', to choose among various hardware models or
10719configurations--for example, 68010 vs 68020, floating coprocessor or
10720none.  A single installed version of the compiler can compile for any
10721model or configuration, according to the options specified.
10722
10723 Some configurations of the compiler also support additional special
10724options, usually for compatibility with other compilers on the same
10725platform.
10726
10727* Menu:
10728
10729* AArch64 Options::
10730* Adapteva Epiphany Options::
10731* ARM Options::
10732* AVR Options::
10733* Blackfin Options::
10734* C6X Options::
10735* CRIS Options::
10736* CR16 Options::
10737* Darwin Options::
10738* DEC Alpha Options::
10739* FR30 Options::
10740* FRV Options::
10741* GNU/Linux Options::
10742* H8/300 Options::
10743* HPPA Options::
10744* i386 and x86-64 Options::
10745* i386 and x86-64 Windows Options::
10746* IA-64 Options::
10747* LM32 Options::
10748* M32C Options::
10749* M32R/D Options::
10750* M680x0 Options::
10751* MCore Options::
10752* MeP Options::
10753* MicroBlaze Options::
10754* MIPS Options::
10755* MMIX Options::
10756* MN10300 Options::
10757* Moxie Options::
10758* PDP-11 Options::
10759* picoChip Options::
10760* PowerPC Options::
10761* RL78 Options::
10762* RS/6000 and PowerPC Options::
10763* RX Options::
10764* S/390 and zSeries Options::
10765* Score Options::
10766* SH Options::
10767* Solaris 2 Options::
10768* SPARC Options::
10769* SPU Options::
10770* System V Options::
10771* TILE-Gx Options::
10772* TILEPro Options::
10773* V850 Options::
10774* VAX Options::
10775* VMS Options::
10776* VxWorks Options::
10777* x86-64 Options::
10778* Xstormy16 Options::
10779* Xtensa Options::
10780* zSeries Options::
10781
10782
10783File: gcc.info,  Node: AArch64 Options,  Next: Adapteva Epiphany Options,  Up: Submodel Options
10784
107853.17.1 AArch64 Options
10786----------------------
10787
10788These options are defined for AArch64 implementations:
10789
10790`-mbig-endian'
10791     Generate big-endian code.  This is the default when GCC is
10792     configured for an `aarch64_be-*-*' target.
10793
10794`-mgeneral-regs-only'
10795     Generate code which uses only the general registers.
10796
10797`-mlittle-endian'
10798     Generate little-endian code.  This is the default when GCC is
10799     configured for an `aarch64-*-*' but not an `aarch64_be-*-*' target.
10800
10801`-mcmodel=tiny'
10802     Generate code for the tiny code model.  The program and its
10803     statically defined symbols must be within 1GB of each other.
10804     Pointers are 64 bits.  Programs can be statically or dynamically
10805     linked.  This model is not fully implemented and mostly treated as
10806     `small'.
10807
10808`-mcmodel=small'
10809     Generate code for the small code model.  The program and its
10810     statically defined symbols must be within 4GB of each other.
10811     Pointers are 64 bits.  Programs can be statically or dynamically
10812     linked.  This is the default code model.
10813
10814`-mcmodel=large'
10815     Generate code for the large code model.  This makes no assumptions
10816     about addresses and sizes of sections.  Pointers are 64 bits.
10817     Programs can be statically linked only.
10818
10819`-mstrict-align'
10820     Do not assume that unaligned memory references will be handled by
10821     the system.
10822
10823`-momit-leaf-frame-pointer'
10824`-mno-omit-leaf-frame-pointer'
10825     Omit or keep the frame pointer in leaf functions.  The former
10826     behaviour is the default.
10827
10828`-mtls-dialect=desc'
10829     Use TLS descriptors as the thread-local storage mechanism for
10830     dynamic accesses of TLS variables.  This is the default.
10831
10832`-mtls-dialect=traditional'
10833     Use traditional TLS as the thread-local storage mechanism for
10834     dynamic accesses of TLS variables.
10835
10836`-mfix-cortex-a53-835769'
10837`-mno-fix-cortex-a53-835769'
10838     Enable or disable the workaround for the ARM Cortex-A53 erratum
10839     number 835769.  This will involve inserting a NOP instruction
10840     between memory instructions and 64-bit integer multiply-accumulate
10841     instructions.
10842
10843`-march=NAME'
10844     Specify the name of the target architecture, optionally suffixed
10845     by one or more feature modifiers.  This option has the form
10846     `-march=ARCH{+[no]FEATURE}*', where the only value for ARCH is
10847     `armv8-a'.  The possible values for FEATURE are documented in the
10848     sub-section below.
10849
10850     Where conflicting feature modifiers are specified, the right-most
10851     feature is used.
10852
10853     GCC uses this name to determine what kind of instructions it can
10854     emit when generating assembly code.  This option can be used in
10855     conjunction with or instead of the `-mcpu=' option.
10856
10857`-mcpu=NAME'
10858     Specify the name of the target processor, optionally suffixed by
10859     one or more feature modifiers.  This option has the form
10860     `-mcpu=CPU{+[no]FEATURE}*', where the possible values for CPU are
10861     `generic', `large'.  The possible values for FEATURE are
10862     documented in the sub-section below.
10863
10864     Where conflicting feature modifiers are specified, the right-most
10865     feature is used.
10866
10867     GCC uses this name to determine what kind of instructions it can
10868     emit when generating assembly code.
10869
10870`-mtune=NAME'
10871     Specify the name of the processor to tune the performance for.
10872     The code will be tuned as if the target processor were of the type
10873     specified in this option, but still using instructions compatible
10874     with the target processor specified by a `-mcpu=' option.  This
10875     option cannot be suffixed by feature modifiers.
10876
10877
108783.17.1.1 `-march' and `-mcpu' feature modifiers
10879...............................................
10880
10881Feature modifiers used with `-march' and `-mcpu' can be one the
10882following:
10883
10884`crypto'
10885     Enable Crypto extension.  This implies Advanced SIMD is enabled.
10886
10887`fp'
10888     Enable floating-point instructions.
10889
10890`simd'
10891     Enable Advanced SIMD instructions.  This implies floating-point
10892     instructions are enabled.  This is the default for all current
10893     possible values for options `-march' and `-mcpu='.
10894
10895
10896File: gcc.info,  Node: Adapteva Epiphany Options,  Next: ARM Options,  Prev: AArch64 Options,  Up: Submodel Options
10897
108983.17.2 Adapteva Epiphany Options
10899--------------------------------
10900
10901These `-m' options are defined for Adapteva Epiphany:
10902
10903`-mhalf-reg-file'
10904     Don't allocate any register in the range `r32'...`r63'.  That
10905     allows code to run on hardware variants that lack these registers.
10906
10907`-mprefer-short-insn-regs'
10908     Preferrentially allocate registers that allow short instruction
10909     generation.  This can result in increased instruction count, so
10910     this may either reduce or increase overall code size.
10911
10912`-mbranch-cost=NUM'
10913     Set the cost of branches to roughly NUM "simple" instructions.
10914     This cost is only a heuristic and is not guaranteed to produce
10915     consistent results across releases.
10916
10917`-mcmove'
10918     Enable the generation of conditional moves.
10919
10920`-mnops=NUM'
10921     Emit NUM NOPs before every other generated instruction.
10922
10923`-mno-soft-cmpsf'
10924     For single-precision floating-point comparisons, emit an `fsub'
10925     instruction and test the flags.  This is faster than a software
10926     comparison, but can get incorrect results in the presence of NaNs,
10927     or when two different small numbers are compared such that their
10928     difference is calculated as zero.  The default is `-msoft-cmpsf',
10929     which uses slower, but IEEE-compliant, software comparisons.
10930
10931`-mstack-offset=NUM'
10932     Set the offset between the top of the stack and the stack pointer.
10933     E.g., a value of 8 means that the eight bytes in the range
10934     `sp+0...sp+7' can be used by leaf functions without stack
10935     allocation.  Values other than `8' or `16' are untested and
10936     unlikely to work.  Note also that this option changes the ABI;
10937     compiling a program with a different stack offset than the
10938     libraries have been compiled with generally does not work.  This
10939     option can be useful if you want to evaluate if a different stack
10940     offset would give you better code, but to actually use a different
10941     stack offset to build working programs, it is recommended to
10942     configure the toolchain with the appropriate
10943     `--with-stack-offset=NUM' option.
10944
10945`-mno-round-nearest'
10946     Make the scheduler assume that the rounding mode has been set to
10947     truncating.  The default is `-mround-nearest'.
10948
10949`-mlong-calls'
10950     If not otherwise specified by an attribute, assume all calls might
10951     be beyond the offset range of the `b' / `bl' instructions, and
10952     therefore load the function address into a register before
10953     performing a (otherwise direct) call.  This is the default.
10954
10955`-mshort-calls'
10956     If not otherwise specified by an attribute, assume all direct
10957     calls are in the range of the `b' / `bl' instructions, so use
10958     these instructions for direct calls.  The default is
10959     `-mlong-calls'.
10960
10961`-msmall16'
10962     Assume addresses can be loaded as 16-bit unsigned values.  This
10963     does not apply to function addresses for which `-mlong-calls'
10964     semantics are in effect.
10965
10966`-mfp-mode=MODE'
10967     Set the prevailing mode of the floating-point unit.  This
10968     determines the floating-point mode that is provided and expected
10969     at function call and return time.  Making this mode match the mode
10970     you predominantly need at function start can make your programs
10971     smaller and faster by avoiding unnecessary mode switches.
10972
10973     MODE can be set to one the following values:
10974
10975    `caller'
10976          Any mode at function entry is valid, and retained or restored
10977          when the function returns, and when it calls other functions.
10978          This mode is useful for compiling libraries or other
10979          compilation units you might want to incorporate into
10980          different programs with different prevailing FPU modes, and
10981          the convenience of being able to use a single object file
10982          outweighs the size and speed overhead for any extra mode
10983          switching that might be needed, compared with what would be
10984          needed with a more specific choice of prevailing FPU mode.
10985
10986    `truncate'
10987          This is the mode used for floating-point calculations with
10988          truncating (i.e. round towards zero) rounding mode.  That
10989          includes conversion from floating point to integer.
10990
10991    `round-nearest'
10992          This is the mode used for floating-point calculations with
10993          round-to-nearest-or-even rounding mode.
10994
10995    `int'
10996          This is the mode used to perform integer calculations in the
10997          FPU, e.g.  integer multiply, or integer
10998          multiply-and-accumulate.
10999
11000     The default is `-mfp-mode=caller'
11001
11002`-mnosplit-lohi'
11003`-mno-postinc'
11004`-mno-postmodify'
11005     Code generation tweaks that disable, respectively, splitting of
11006     32-bit loads, generation of post-increment addresses, and
11007     generation of post-modify addresses.  The defaults are
11008     `msplit-lohi', `-mpost-inc', and `-mpost-modify'.
11009
11010`-mnovect-double'
11011     Change the preferred SIMD mode to SImode.  The default is
11012     `-mvect-double', which uses DImode as preferred SIMD mode.
11013
11014`-max-vect-align=NUM'
11015     The maximum alignment for SIMD vector mode types.  NUM may be 4 or
11016     8.  The default is 8.  Note that this is an ABI change, even
11017     though many library function interfaces are unaffected if they
11018     don't use SIMD vector modes in places that affect size and/or
11019     alignment of relevant types.
11020
11021`-msplit-vecmove-early'
11022     Split vector moves into single word moves before reload.  In
11023     theory this can give better register allocation, but so far the
11024     reverse seems to be generally the case.
11025
11026`-m1reg-REG'
11027     Specify a register to hold the constant -1, which makes loading
11028     small negative constants and certain bitmasks faster.  Allowable
11029     values for REG are `r43' and `r63', which specify use of that
11030     register as a fixed register, and `none', which means that no
11031     register is used for this purpose.  The default is `-m1reg-none'.
11032
11033
11034
11035File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: Adapteva Epiphany Options,  Up: Submodel Options
11036
110373.17.3 ARM Options
11038------------------
11039
11040These `-m' options are defined for Advanced RISC Machines (ARM)
11041architectures:
11042
11043`-mabi=NAME'
11044     Generate code for the specified ABI.  Permissible values are:
11045     `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'.
11046
11047`-mapcs-frame'
11048     Generate a stack frame that is compliant with the ARM Procedure
11049     Call Standard for all functions, even if this is not strictly
11050     necessary for correct execution of the code.  Specifying
11051     `-fomit-frame-pointer' with this option causes the stack frames
11052     not to be generated for leaf functions.  The default is
11053     `-mno-apcs-frame'.
11054
11055`-mapcs'
11056     This is a synonym for `-mapcs-frame'.
11057
11058`-mthumb-interwork'
11059     Generate code that supports calling between the ARM and Thumb
11060     instruction sets.  Without this option, on pre-v5 architectures,
11061     the two instruction sets cannot be reliably used inside one
11062     program.  The default is `-mno-thumb-interwork', since slightly
11063     larger code is generated when `-mthumb-interwork' is specified.
11064     In AAPCS configurations this option is meaningless.
11065
11066`-mno-sched-prolog'
11067     Prevent the reordering of instructions in the function prologue,
11068     or the merging of those instruction with the instructions in the
11069     function's body.  This means that all functions start with a
11070     recognizable set of instructions (or in fact one of a choice from
11071     a small set of different function prologues), and this information
11072     can be used to locate the start of functions inside an executable
11073     piece of code.  The default is `-msched-prolog'.
11074
11075`-mfloat-abi=NAME'
11076     Specifies which floating-point ABI to use.  Permissible values
11077     are: `soft', `softfp' and `hard'.
11078
11079     Specifying `soft' causes GCC to generate output containing library
11080     calls for floating-point operations.  `softfp' allows the
11081     generation of code using hardware floating-point instructions, but
11082     still uses the soft-float calling conventions.  `hard' allows
11083     generation of floating-point instructions and uses FPU-specific
11084     calling conventions.
11085
11086     The default depends on the specific target configuration.  Note
11087     that the hard-float and soft-float ABIs are not link-compatible;
11088     you must compile your entire program with the same ABI, and link
11089     with a compatible set of libraries.
11090
11091`-mlittle-endian'
11092     Generate code for a processor running in little-endian mode.  This
11093     is the default for all standard configurations.
11094
11095`-mbig-endian'
11096     Generate code for a processor running in big-endian mode; the
11097     default is to compile code for a little-endian processor.
11098
11099`-mwords-little-endian'
11100     This option only applies when generating code for big-endian
11101     processors.  Generate code for a little-endian word order but a
11102     big-endian byte order.  That is, a byte order of the form
11103     `32107654'.  Note: this option should only be used if you require
11104     compatibility with code for big-endian ARM processors generated by
11105     versions of the compiler prior to 2.8.  This option is now
11106     deprecated.
11107
11108`-march=NAME'
11109     This specifies the name of the target ARM architecture.  GCC uses
11110     this name to determine what kind of instructions it can emit when
11111     generating assembly code.  This option can be used in conjunction
11112     with or instead of the `-mcpu=' option.  Permissible names are:
11113     `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5',
11114     `armv5t', `armv5e', `armv5te', `armv6', `armv6j', `armv6t2',
11115     `armv6z', `armv6zk', `armv6-m', `armv7', `armv7-a', `armv7-r',
11116     `armv7-m', `armv7e-m' `armv8-a', `iwmmxt', `iwmmxt2', `ep9312'.
11117
11118     `-march=native' causes the compiler to auto-detect the architecture
11119     of the build computer.  At present, this feature is only supported
11120     on GNU/Linux, and not all architectures are recognized.  If the
11121     auto-detect is unsuccessful the option has no effect.
11122
11123`-mtune=NAME'
11124     This option specifies the name of the target ARM processor for
11125     which GCC should tune the performance of the code.  For some ARM
11126     implementations better performance can be obtained by using this
11127     option.  Permissible names are: `arm2', `arm250', `arm3', `arm6',
11128     `arm60', `arm600', `arm610', `arm620', `arm7', `arm7m', `arm7d',
11129     `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', `arm700i',
11130     `arm710', `arm710c', `arm7100', `arm720', `arm7500', `arm7500fe',
11131     `arm7tdmi', `arm7tdmi-s', `arm710t', `arm720t', `arm740t',
11132     `strongarm', `strongarm110', `strongarm1100', `strongarm1110',
11133     `arm8', `arm810', `arm9', `arm9e', `arm920', `arm920t', `arm922t',
11134     `arm946e-s', `arm966e-s', `arm968e-s', `arm926ej-s', `arm940t',
11135     `arm9tdmi', `arm10tdmi', `arm1020t', `arm1026ej-s', `arm10e',
11136     `arm1020e', `arm1022e', `arm1136j-s', `arm1136jf-s', `mpcore',
11137     `mpcorenovfp', `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s',
11138     `arm1176jzf-s', `cortex-a5', `cortex-a7', `cortex-a8', `cortex-a9',
11139     `cortex-a15', `cortex-r4', `cortex-r4f', `cortex-r5', `cortex-m4',
11140     `cortex-m3', `cortex-m1', `cortex-m0', `cortex-m0plus',
11141     `marvell-pj4', `xscale', `iwmmxt', `iwmmxt2', `ep9312', `fa526',
11142     `fa626', `fa606te', `fa626te', `fmp626', `fa726te'.
11143
11144     `-mtune=generic-ARCH' specifies that GCC should tune the
11145     performance for a blend of processors within architecture ARCH.
11146     The aim is to generate code that run well on the current most
11147     popular processors, balancing between optimizations that benefit
11148     some CPUs in the range, and avoiding performance pitfalls of other
11149     CPUs.  The effects of this option may change in future GCC
11150     versions as CPU models come and go.
11151
11152     `-mtune=native' causes the compiler to auto-detect the CPU of the
11153     build computer.  At present, this feature is only supported on
11154     GNU/Linux, and not all architectures are recognized.  If the
11155     auto-detect is unsuccessful the option has no effect.
11156
11157`-mcpu=NAME'
11158     This specifies the name of the target ARM processor.  GCC uses
11159     this name to derive the name of the target ARM architecture (as if
11160     specified by `-march') and the ARM processor type for which to
11161     tune for performance (as if specified by `-mtune').  Where this
11162     option is used in conjunction with `-march' or `-mtune', those
11163     options take precedence over the appropriate part of this option.
11164
11165     Permissible names for this option are the same as those for
11166     `-mtune'.
11167
11168     `-mcpu=generic-ARCH' is also permissible, and is equivalent to
11169     `-march=ARCH -mtune=generic-ARCH'.  See `-mtune' for more
11170     information.
11171
11172     `-mcpu=native' causes the compiler to auto-detect the CPU of the
11173     build computer.  At present, this feature is only supported on
11174     GNU/Linux, and not all architectures are recognized.  If the
11175     auto-detect is unsuccessful the option has no effect.
11176
11177`-mfpu=NAME'
11178     This specifies what floating-point hardware (or hardware
11179     emulation) is available on the target.  Permissible names are:
11180     `vfp', `vfpv3', `vfpv3-fp16', `vfpv3-d16', `vfpv3-d16-fp16',
11181     `vfpv3xd', `vfpv3xd-fp16', `neon', `neon-fp16', `vfpv4',
11182     `vfpv4-d16', `fpv4-sp-d16', `neon-vfpv4', `fp-armv8',
11183     `neon-fp-armv8', and `crypto-neon-fp-armv8'.
11184
11185     If `-msoft-float' is specified this specifies the format of
11186     floating-point values.
11187
11188     If the selected floating-point hardware includes the NEON extension
11189     (e.g. `-mfpu'=`neon'), note that floating-point operations are not
11190     generated by GCC's auto-vectorization pass unless
11191     `-funsafe-math-optimizations' is also specified.  This is because
11192     NEON hardware does not fully implement the IEEE 754 standard for
11193     floating-point arithmetic (in particular denormal values are
11194     treated as zero), so the use of NEON instructions may lead to a
11195     loss of precision.
11196
11197`-mfp16-format=NAME'
11198     Specify the format of the `__fp16' half-precision floating-point
11199     type.  Permissible names are `none', `ieee', and `alternative';
11200     the default is `none', in which case the `__fp16' type is not
11201     defined.  *Note Half-Precision::, for more information.
11202
11203`-mstructure-size-boundary=N'
11204     The sizes of all structures and unions are rounded up to a multiple
11205     of the number of bits set by this option.  Permissible values are
11206     8, 32 and 64.  The default value varies for different toolchains.
11207     For the COFF targeted toolchain the default value is 8.  A value
11208     of 64 is only allowed if the underlying ABI supports it.
11209
11210     Specifying a larger number can produce faster, more efficient
11211     code, but can also increase the size of the program.  Different
11212     values are potentially incompatible.  Code compiled with one value
11213     cannot necessarily expect to work with code or libraries compiled
11214     with another value, if they exchange information using structures
11215     or unions.
11216
11217`-mabort-on-noreturn'
11218     Generate a call to the function `abort' at the end of a `noreturn'
11219     function.  It is executed if the function tries to return.
11220
11221`-mlong-calls'
11222`-mno-long-calls'
11223     Tells the compiler to perform function calls by first loading the
11224     address of the function into a register and then performing a
11225     subroutine call on this register.  This switch is needed if the
11226     target function lies outside of the 64-megabyte addressing range
11227     of the offset-based version of subroutine call instruction.
11228
11229     Even if this switch is enabled, not all function calls are turned
11230     into long calls.  The heuristic is that static functions, functions
11231     that have the `short-call' attribute, functions that are inside
11232     the scope of a `#pragma no_long_calls' directive, and functions
11233     whose definitions have already been compiled within the current
11234     compilation unit are not turned into long calls.  The exceptions
11235     to this rule are that weak function definitions, functions with
11236     the `long-call' attribute or the `section' attribute, and
11237     functions that are within the scope of a `#pragma long_calls'
11238     directive are always turned into long calls.
11239
11240     This feature is not enabled by default.  Specifying
11241     `-mno-long-calls' restores the default behavior, as does placing
11242     the function calls within the scope of a `#pragma long_calls_off'
11243     directive.  Note these switches have no effect on how the compiler
11244     generates code to handle function calls via function pointers.
11245
11246`-msingle-pic-base'
11247     Treat the register used for PIC addressing as read-only, rather
11248     than loading it in the prologue for each function.  The runtime
11249     system is responsible for initializing this register with an
11250     appropriate value before execution begins.
11251
11252`-mpic-register=REG'
11253     Specify the register to be used for PIC addressing.  For standard
11254     PIC base case, the default will be any suitable register
11255     determined by compiler.  For single PIC base case, the default is
11256     `R9' if target is EABI based or stack-checking is enabled,
11257     otherwise the default is `R10'.
11258
11259`-mpoke-function-name'
11260     Write the name of each function into the text section, directly
11261     preceding the function prologue.  The generated code is similar to
11262     this:
11263
11264               t0
11265                   .ascii "arm_poke_function_name", 0
11266                   .align
11267               t1
11268                   .word 0xff000000 + (t1 - t0)
11269               arm_poke_function_name
11270                   mov     ip, sp
11271                   stmfd   sp!, {fp, ip, lr, pc}
11272                   sub     fp, ip, #4
11273
11274     When performing a stack backtrace, code can inspect the value of
11275     `pc' stored at `fp + 0'.  If the trace function then looks at
11276     location `pc - 12' and the top 8 bits are set, then we know that
11277     there is a function name embedded immediately preceding this
11278     location and has length `((pc[-3]) & 0xff000000)'.
11279
11280`-mthumb'
11281`-marm'
11282     Select between generating code that executes in ARM and Thumb
11283     states.  The default for most configurations is to generate code
11284     that executes in ARM state, but the default can be changed by
11285     configuring GCC with the `--with-mode='STATE configure option.
11286
11287`-mtpcs-frame'
11288     Generate a stack frame that is compliant with the Thumb Procedure
11289     Call Standard for all non-leaf functions.  (A leaf function is one
11290     that does not call any other functions.)  The default is
11291     `-mno-tpcs-frame'.
11292
11293`-mtpcs-leaf-frame'
11294     Generate a stack frame that is compliant with the Thumb Procedure
11295     Call Standard for all leaf functions.  (A leaf function is one
11296     that does not call any other functions.)  The default is
11297     `-mno-apcs-leaf-frame'.
11298
11299`-mcallee-super-interworking'
11300     Gives all externally visible functions in the file being compiled
11301     an ARM instruction set header which switches to Thumb mode before
11302     executing the rest of the function.  This allows these functions
11303     to be called from non-interworking code.  This option is not valid
11304     in AAPCS configurations because interworking is enabled by default.
11305
11306`-mcaller-super-interworking'
11307     Allows calls via function pointers (including virtual functions) to
11308     execute correctly regardless of whether the target code has been
11309     compiled for interworking or not.  There is a small overhead in
11310     the cost of executing a function pointer if this option is
11311     enabled.  This option is not valid in AAPCS configurations because
11312     interworking is enabled by default.
11313
11314`-mtp=NAME'
11315     Specify the access model for the thread local storage pointer.
11316     The valid models are `soft', which generates calls to
11317     `__aeabi_read_tp', `cp15', which fetches the thread pointer from
11318     `cp15' directly (supported in the arm6k architecture), and `auto',
11319     which uses the best available method for the selected processor.
11320     The default setting is `auto'.
11321
11322`-mtls-dialect=DIALECT'
11323     Specify the dialect to use for accessing thread local storage.  Two
11324     DIALECTs are supported--`gnu' and `gnu2'.  The `gnu' dialect
11325     selects the original GNU scheme for supporting local and global
11326     dynamic TLS models.  The `gnu2' dialect selects the GNU descriptor
11327     scheme, which provides better performance for shared libraries.
11328     The GNU descriptor scheme is compatible with the original scheme,
11329     but does require new assembler, linker and library support.
11330     Initial and local exec TLS models are unaffected by this option
11331     and always use the original scheme.
11332
11333`-mword-relocations'
11334     Only generate absolute relocations on word-sized values (i.e.
11335     R_ARM_ABS32).  This is enabled by default on targets (uClinux,
11336     SymbianOS) where the runtime loader imposes this restriction, and
11337     when `-fpic' or `-fPIC' is specified.
11338
11339`-mfix-cortex-m3-ldrd'
11340     Some Cortex-M3 cores can cause data corruption when `ldrd'
11341     instructions with overlapping destination and base registers are
11342     used.  This option avoids generating these instructions.  This
11343     option is enabled by default when `-mcpu=cortex-m3' is specified.
11344
11345`-munaligned-access'
11346`-mno-unaligned-access'
11347     Enables (or disables) reading and writing of 16- and 32- bit values
11348     from addresses that are not 16- or 32- bit aligned.  By default
11349     unaligned access is disabled for all pre-ARMv6 and all ARMv6-M
11350     architectures, and enabled for all other architectures.  If
11351     unaligned access is not enabled then words in packed data
11352     structures will be accessed a byte at a time.
11353
11354     The ARM attribute `Tag_CPU_unaligned_access' will be set in the
11355     generated object file to either true or false, depending upon the
11356     setting of this option.  If unaligned access is enabled then the
11357     preprocessor symbol `__ARM_FEATURE_UNALIGNED' will also be defined.
11358
11359
11360
11361File: gcc.info,  Node: AVR Options,  Next: Blackfin Options,  Prev: ARM Options,  Up: Submodel Options
11362
113633.17.4 AVR Options
11364------------------
11365
11366These options are defined for AVR implementations:
11367
11368`-mmcu=MCU'
11369     Specify Atmel AVR instruction set architectures (ISA) or MCU type.
11370
11371     The default for this option is `avr2'.
11372
11373     GCC supports the following AVR devices and ISAs:
11374
11375    `avr2'
11376          "Classic" devices with up to 8 KiB of program memory.
11377          MCU = `attiny22', `attiny26', `at90c8534', `at90s2313',
11378          `at90s2323', `at90s2333', `at90s2343', `at90s4414',
11379          `at90s4433', `at90s4434', `at90s8515', `at90s8535'.
11380
11381    `avr25'
11382          "Classic" devices with up to 8 KiB of program memory and with
11383          the `MOVW' instruction.
11384          MCU = `ata5272', `ata6289', `attiny13', `attiny13a',
11385          `attiny2313', `attiny2313a', `attiny24', `attiny24a',
11386          `attiny25', `attiny261', `attiny261a', `attiny43u',
11387          `attiny4313', `attiny44', `attiny44a', `attiny45',
11388          `attiny461', `attiny461a', `attiny48', `attiny84',
11389          `attiny84a', `attiny85', `attiny861', `attiny861a',
11390          `attiny87', `attiny88', `at86rf401'.
11391
11392    `avr3'
11393          "Classic" devices with 16 KiB up to 64 KiB of  program memory.
11394          MCU = `at43usb355', `at76c711'.
11395
11396    `avr31'
11397          "Classic" devices with 128 KiB of program memory.
11398          MCU = `atmega103', `at43usb320'.
11399
11400    `avr35'
11401          "Classic" devices with 16 KiB up to 64 KiB of program memory
11402          and with the `MOVW' instruction.
11403          MCU = `ata5505', `atmega16u2', `atmega32u2', `atmega8u2',
11404          `attiny1634', `attiny167', `at90usb162', `at90usb82'.
11405
11406    `avr4'
11407          "Enhanced" devices with up to 8 KiB of program memory.
11408          MCU = `ata6285', `ata6286', `atmega48', `atmega48a',
11409          `atmega48p', `atmega48pa', `atmega8', `atmega8a',
11410          `atmega8hva', `atmega8515', `atmega8535', `atmega88',
11411          `atmega88a', `atmega88p', `atmega88pa', `at90pwm1',
11412          `at90pwm2', `at90pwm2b', `at90pwm3', `at90pwm3b', `at90pwm81'.
11413
11414    `avr5'
11415          "Enhanced" devices with 16 KiB up to 64 KiB of program memory.
11416          MCU = `ata5790', `ata5790n', `ata5795', `atmega16',
11417          `atmega16a', `atmega16hva', `atmega16hva2', `atmega16hvb',
11418          `atmega16hvbrevb', `atmega16m1', `atmega16u4', `atmega161',
11419          `atmega162', `atmega163', `atmega164a', `atmega164p',
11420          `atmega164pa', `atmega165', `atmega165a', `atmega165p',
11421          `atmega165pa', `atmega168', `atmega168a', `atmega168p',
11422          `atmega168pa', `atmega169', `atmega169a', `atmega169p',
11423          `atmega169pa', `atmega26hvg', `atmega32', `atmega32a',
11424          `atmega32c1', `atmega32hvb', `atmega32hvbrevb', `atmega32m1',
11425          `atmega32u4', `atmega32u6', `atmega323', `atmega324a',
11426          `atmega324p', `atmega324pa', `atmega325', `atmega325a',
11427          `atmega325p', `atmega3250', `atmega3250a', `atmega3250p',
11428          `atmega3250pa', `atmega328', `atmega328p', `atmega329',
11429          `atmega329a', `atmega329p', `atmega329pa', `atmega3290',
11430          `atmega3290a', `atmega3290p', `atmega3290pa', `atmega406',
11431          `atmega48hvf', `atmega64', `atmega64a', `atmega64c1',
11432          `atmega64hve', `atmega64m1', `atmega64rfa2', `atmega64rfr2',
11433          `atmega640', `atmega644', `atmega644a', `atmega644p',
11434          `atmega644pa', `atmega645', `atmega645a', `atmega645p',
11435          `atmega6450', `atmega6450a', `atmega6450p', `atmega649',
11436          `atmega649a', `atmega649p', `atmega6490', `atmega6490a',
11437          `atmega6490p', `at90can32', `at90can64', `at90pwm161',
11438          `at90pwm216', `at90pwm316', `at90scr100', `at90usb646',
11439          `at90usb647', `at94k', `m3000'.
11440
11441    `avr51'
11442          "Enhanced" devices with 128 KiB of program memory.
11443          MCU = `atmega128', `atmega128a', `atmega128rfa1',
11444          `atmega1280', `atmega1281', `atmega1284', `atmega1284p',
11445          `at90can128', `at90usb1286', `at90usb1287'.
11446
11447    `avr6'
11448          "Enhanced" devices with 3-byte PC, i.e. with more than
11449          128 KiB of program memory.
11450          MCU = `atmega2560', `atmega2561'.
11451
11452    `avrxmega2'
11453          "XMEGA" devices with more than 8 KiB and up to 64 KiB of
11454          program memory.
11455          MCU = `atmxt112sl', `atmxt224', `atmxt224e', `atmxt336s',
11456          `atxmega16a4', `atxmega16a4u', `atxmega16c4', `atxmega16d4',
11457          `atxmega16x1', `atxmega32a4', `atxmega32a4u', `atxmega32c4',
11458          `atxmega32d4', `atxmega32e5', `atxmega32x1'.
11459
11460    `avrxmega4'
11461          "XMEGA" devices with more than 64 KiB and up to 128 KiB of
11462          program memory.
11463          MCU = `atxmega64a3', `atxmega64a3u', `atxmega64a4u',
11464          `atxmega64b1', `atxmega64b3', `atxmega64c3', `atxmega64d3',
11465          `atxmega64d4'.
11466
11467    `avrxmega5'
11468          "XMEGA" devices with more than 64 KiB and up to 128 KiB of
11469          program memory and more than 64 KiB of RAM.
11470          MCU = `atxmega64a1', `atxmega64a1u'.
11471
11472    `avrxmega6'
11473          "XMEGA" devices with more than 128 KiB of program memory.
11474          MCU = `atmxt540s', `atmxt540sreva', `atxmega128a3',
11475          `atxmega128a3u', `atxmega128b1', `atxmega128b3',
11476          `atxmega128c3', `atxmega128d3', `atxmega128d4',
11477          `atxmega192a3', `atxmega192a3u', `atxmega192c3',
11478          `atxmega192d3', `atxmega256a3', `atxmega256a3b',
11479          `atxmega256a3bu', `atxmega256a3u', `atxmega256c3',
11480          `atxmega256d3', `atxmega384c3', `atxmega384d3'.
11481
11482    `avrxmega7'
11483          "XMEGA" devices with more than 128 KiB of program memory and
11484          more than 64 KiB of RAM.
11485          MCU = `atxmega128a1', `atxmega128a1u', `atxmega128a4u'.
11486
11487    `avr1'
11488          This ISA is implemented by the minimal AVR core and supported
11489          for assembler only.
11490          MCU = `attiny11', `attiny12', `attiny15', `attiny28',
11491          `at90s1200'.
11492
11493
11494`-maccumulate-args'
11495     Accumulate outgoing function arguments and acquire/release the
11496     needed stack space for outgoing function arguments once in function
11497     prologue/epilogue.  Without this option, outgoing arguments are
11498     pushed before calling a function and popped afterwards.
11499
11500     Popping the arguments after the function call can be expensive on
11501     AVR so that accumulating the stack space might lead to smaller
11502     executables because arguments need not to be removed from the
11503     stack after such a function call.
11504
11505     This option can lead to reduced code size for functions that
11506     perform several calls to functions that get their arguments on the
11507     stack like calls to printf-like functions.
11508
11509`-mbranch-cost=COST'
11510     Set the branch costs for conditional branch instructions to COST.
11511     Reasonable values for COST are small, non-negative integers. The
11512     default branch cost is 0.
11513
11514`-mcall-prologues'
11515     Functions prologues/epilogues are expanded as calls to appropriate
11516     subroutines.  Code size is smaller.
11517
11518`-mint8'
11519     Assume `int' to be 8-bit integer.  This affects the sizes of all
11520     types: a `char' is 1 byte, an `int' is 1 byte, a `long' is 2 bytes,
11521     and `long long' is 4 bytes.  Please note that this option does not
11522     conform to the C standards, but it results in smaller code size.
11523
11524`-mno-interrupts'
11525     Generated code is not compatible with hardware interrupts.  Code
11526     size is smaller.
11527
11528`-mrelax'
11529     Try to replace `CALL' resp. `JMP' instruction by the shorter
11530     `RCALL' resp. `RJMP' instruction if applicable.  Setting `-mrelax'
11531     just adds the `--relax' option to the linker command line when the
11532     linker is called.
11533
11534     Jump relaxing is performed by the linker because jump offsets are
11535     not known before code is located. Therefore, the assembler code
11536     generated by the compiler is the same, but the instructions in the
11537     executable may differ from instructions in the assembler code.
11538
11539     Relaxing must be turned on if linker stubs are needed, see the
11540     section on `EIND' and linker stubs below.
11541
11542`-msp8'
11543     Treat the stack pointer register as an 8-bit register, i.e. assume
11544     the high byte of the stack pointer is zero.  In general, you don't
11545     need to set this option by hand.
11546
11547     This option is used internally by the compiler to select and build
11548     multilibs for architectures `avr2' and `avr25'.  These
11549     architectures mix devices with and without `SPH'.  For any setting
11550     other than `-mmcu=avr2' or `-mmcu=avr25' the compiler driver will
11551     add or remove this option from the compiler proper's command line,
11552     because the compiler then knows if the device or architecture has
11553     an 8-bit stack pointer and thus no `SPH' register or not.
11554
11555`-mstrict-X'
11556     Use address register `X' in a way proposed by the hardware.  This
11557     means that `X' is only used in indirect, post-increment or
11558     pre-decrement addressing.
11559
11560     Without this option, the `X' register may be used in the same way
11561     as `Y' or `Z' which then is emulated by additional instructions.
11562     For example, loading a value with `X+const' addressing with a
11563     small non-negative `const < 64' to a register RN is performed as
11564
11565          adiw r26, const   ; X += const
11566          ld   RN, X        ; RN = *X
11567          sbiw r26, const   ; X -= const
11568
11569`-mtiny-stack'
11570     Only change the lower 8 bits of the stack pointer.
11571
11572`-Waddr-space-convert'
11573     Warn about conversions between address spaces in the case where the
11574     resulting address space is not contained in the incoming address
11575     space.
11576
115773.17.4.1 `EIND' and Devices with more than 128 Ki Bytes of Flash
11578................................................................
11579
11580Pointers in the implementation are 16 bits wide.  The address of a
11581function or label is represented as word address so that indirect jumps
11582and calls can target any code address in the range of 64 Ki words.
11583
11584 In order to facilitate indirect jump on devices with more than 128 Ki
11585bytes of program memory space, there is a special function register
11586called `EIND' that serves as most significant part of the target address
11587when `EICALL' or `EIJMP' instructions are used.
11588
11589 Indirect jumps and calls on these devices are handled as follows by
11590the compiler and are subject to some limitations:
11591
11592   * The compiler never sets `EIND'.
11593
11594   * The compiler uses `EIND' implicitely in `EICALL'/`EIJMP'
11595     instructions or might read `EIND' directly in order to emulate an
11596     indirect call/jump by means of a `RET' instruction.
11597
11598   * The compiler assumes that `EIND' never changes during the startup
11599     code or during the application. In particular, `EIND' is not
11600     saved/restored in function or interrupt service routine
11601     prologue/epilogue.
11602
11603   * For indirect calls to functions and computed goto, the linker
11604     generates _stubs_. Stubs are jump pads sometimes also called
11605     _trampolines_. Thus, the indirect call/jump jumps to such a stub.
11606     The stub contains a direct jump to the desired address.
11607
11608   * Linker relaxation must be turned on so that the linker will
11609     generate the stubs correctly an all situaltion. See the compiler
11610     option `-mrelax' and the linler option `--relax'.  There are
11611     corner cases where the linker is supposed to generate stubs but
11612     aborts without relaxation and without a helpful error message.
11613
11614   * The default linker script is arranged for code with `EIND = 0'.
11615     If code is supposed to work for a setup with `EIND != 0', a custom
11616     linker script has to be used in order to place the sections whose
11617     name start with `.trampolines' into the segment where `EIND'
11618     points to.
11619
11620   * The startup code from libgcc never sets `EIND'.  Notice that
11621     startup code is a blend of code from libgcc and AVR-LibC.  For the
11622     impact of AVR-LibC on `EIND', see the
11623     AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/).
11624
11625   * It is legitimate for user-specific startup code to set up `EIND'
11626     early, for example by means of initialization code located in
11627     section `.init3'. Such code runs prior to general startup code
11628     that initializes RAM and calls constructors, but after the bit of
11629     startup code from AVR-LibC that sets `EIND' to the segment where
11630     the vector table is located.
11631          #include <avr/io.h>
11632
11633          static void
11634          __attribute__((section(".init3"),naked,used,no_instrument_function))
11635          init3_set_eind (void)
11636          {
11637            __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
11638                            "out %i0,r24" :: "n" (&EIND) : "r24","memory");
11639          }
11640
11641     The `__trampolines_start' symbol is defined in the linker script.
11642
11643   * Stubs are generated automatically by the linker if the following
11644     two conditions are met:
11645        - The address of a label is taken by means of the `gs' modifier
11646          (short for _generate stubs_) like so:
11647               LDI r24, lo8(gs(FUNC))
11648               LDI r25, hi8(gs(FUNC))
11649
11650        - The final location of that label is in a code segment
11651          _outside_ the segment where the stubs are located.
11652
11653   * The compiler emits such `gs' modifiers for code labels in the
11654     following situations:
11655        - Taking address of a function or code label.
11656
11657        - Computed goto.
11658
11659        - If prologue-save function is used, see `-mcall-prologues'
11660          command-line option.
11661
11662        - Switch/case dispatch tables. If you do not want such dispatch
11663          tables you can specify the `-fno-jump-tables' command-line
11664          option.
11665
11666        - C and C++ constructors/destructors called during
11667          startup/shutdown.
11668
11669        - If the tools hit a `gs()' modifier explained above.
11670
11671   * Jumping to non-symbolic addresses like so is _not_ supported:
11672
11673          int main (void)
11674          {
11675              /* Call function at word address 0x2 */
11676              return ((int(*)(void)) 0x2)();
11677          }
11678
11679     Instead, a stub has to be set up, i.e. the function has to be
11680     called through a symbol (`func_4' in the example):
11681
11682          int main (void)
11683          {
11684              extern int func_4 (void);
11685
11686              /* Call function at byte address 0x4 */
11687              return func_4();
11688          }
11689
11690     and the application be linked with `-Wl,--defsym,func_4=0x4'.
11691     Alternatively, `func_4' can be defined in the linker script.
11692
116933.17.4.2 Handling of the `RAMPD', `RAMPX', `RAMPY' and `RAMPZ' Special Function Registers
11694.........................................................................................
11695
11696Some AVR devices support memories larger than the 64 KiB range that can
11697be accessed with 16-bit pointers.  To access memory locations outside
11698this 64 KiB range, the contentent of a `RAMP' register is used as high
11699part of the address: The `X', `Y', `Z' address register is concatenated
11700with the `RAMPX', `RAMPY', `RAMPZ' special function register,
11701respectively, to get a wide address. Similarly, `RAMPD' is used
11702together with direct addressing.
11703
11704   * The startup code initializes the `RAMP' special function registers
11705     with zero.
11706
11707   * If a *note named address space: AVR Named Address Spaces. other
11708     than generic or `__flash' is used, then `RAMPZ' is set as needed
11709     before the operation.
11710
11711   * If the device supports RAM larger than 64 KiB and the compiler
11712     needs to change `RAMPZ' to accomplish an operation, `RAMPZ' is
11713     reset to zero after the operation.
11714
11715   * If the device comes with a specific `RAMP' register, the ISR
11716     prologue/epilogue saves/restores that SFR and initializes it with
11717     zero in case the ISR code might (implicitly) use it.
11718
11719   * RAM larger than 64 KiB is not supported by GCC for AVR targets.
11720     If you use inline assembler to read from locations outside the
11721     16-bit address range and change one of the `RAMP' registers, you
11722     must reset it to zero after the access.
11723
11724
117253.17.4.3 AVR Built-in Macros
11726............................
11727
11728GCC defines several built-in macros so that the user code can test for
11729the presence or absence of features.  Almost any of the following
11730built-in macros are deduced from device capabilities and thus triggered
11731by the `-mmcu=' command-line option.
11732
11733 For even more AVR-specific built-in macros see *note AVR Named Address
11734Spaces:: and *note AVR Built-in Functions::.
11735
11736`__AVR_ARCH__'
11737     Build-in macro that resolves to a decimal number that identifies
11738     the architecture and depends on the `-mmcu=MCU' option.  Possible
11739     values are:
11740
11741     `2', `25', `3', `31', `35', `4', `5', `51', `6', `102', `104',
11742     `105', `106', `107'
11743
11744     for MCU=`avr2', `avr25', `avr3', `avr31', `avr35', `avr4', `avr5',
11745     `avr51', `avr6', `avrxmega2', `avrxmega4', `avrxmega5',
11746     `avrxmega6', `avrxmega7', respectively.  If MCU specifies a
11747     device, this built-in macro is set accordingly. For example, with
11748     `-mmcu=atmega8' the macro will be defined to `4'.
11749
11750`__AVR_DEVICE__'
11751     Setting `-mmcu=DEVICE' defines this built-in macro which reflects
11752     the device's name. For example, `-mmcu=atmega8' defines the
11753     built-in macro `__AVR_ATmega8__', `-mmcu=attiny261a' defines
11754     `__AVR_ATtiny261A__', etc.
11755
11756     The built-in macros' names follow the scheme `__AVR_DEVICE__'
11757     where DEVICE is the device name as from the AVR user manual. The
11758     difference between DEVICE in the built-in macro and DEVICE in
11759     `-mmcu=DEVICE' is that the latter is always lowercase.
11760
11761     If DEVICE is not a device but only a core architecture like
11762     `avr51', this macro will not be defined.
11763
11764`__AVR_XMEGA__'
11765     The device / architecture belongs to the XMEGA family of devices.
11766
11767`__AVR_HAVE_ELPM__'
11768     The device has the the `ELPM' instruction.
11769
11770`__AVR_HAVE_ELPMX__'
11771     The device has the `ELPM RN,Z' and `ELPM RN,Z+' instructions.
11772
11773`__AVR_HAVE_MOVW__'
11774     The device has the `MOVW' instruction to perform 16-bit
11775     register-register moves.
11776
11777`__AVR_HAVE_LPMX__'
11778     The device has the `LPM RN,Z' and `LPM RN,Z+' instructions.
11779
11780`__AVR_HAVE_MUL__'
11781     The device has a hardware multiplier.
11782
11783`__AVR_HAVE_JMP_CALL__'
11784     The device has the `JMP' and `CALL' instructions.  This is the
11785     case for devices with at least 16 KiB of program memory.
11786
11787`__AVR_HAVE_EIJMP_EICALL__'
11788`__AVR_3_BYTE_PC__'
11789     The device has the `EIJMP' and `EICALL' instructions.  This is the
11790     case for devices with more than 128 KiB of program memory.  This
11791     also means that the program counter (PC) is 3 bytes wide.
11792
11793`__AVR_2_BYTE_PC__'
11794     The program counter (PC) is 2 bytes wide. This is the case for
11795     devices with up to 128 KiB of program memory.
11796
11797`__AVR_HAVE_8BIT_SP__'
11798`__AVR_HAVE_16BIT_SP__'
11799     The stack pointer (SP) register is treated as 8-bit respectively
11800     16-bit register by the compiler.  The definition of these macros
11801     is affected by `-mtiny-stack'.
11802
11803`__AVR_HAVE_SPH__'
11804`__AVR_SP8__'
11805     The device has the SPH (high part of stack pointer) special
11806     function register or has an 8-bit stack pointer, respectively.
11807     The definition of these macros is affected by `-mmcu=' and in the
11808     cases of `-mmcu=avr2' and `-mmcu=avr25' also by `-msp8'.
11809
11810`__AVR_HAVE_RAMPD__'
11811`__AVR_HAVE_RAMPX__'
11812`__AVR_HAVE_RAMPY__'
11813`__AVR_HAVE_RAMPZ__'
11814     The device has the `RAMPD', `RAMPX', `RAMPY', `RAMPZ' special
11815     function register, respectively.
11816
11817`__NO_INTERRUPTS__'
11818     This macro reflects the `-mno-interrupts' command line option.
11819
11820`__AVR_ERRATA_SKIP__'
11821`__AVR_ERRATA_SKIP_JMP_CALL__'
11822     Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
11823     instructions because of a hardware erratum.  Skip instructions are
11824     `SBRS', `SBRC', `SBIS', `SBIC' and `CPSE'.  The second macro is
11825     only defined if `__AVR_HAVE_JMP_CALL__' is also set.
11826
11827`__AVR_SFR_OFFSET__=OFFSET'
11828     Instructions that can address I/O special function registers
11829     directly like `IN', `OUT', `SBI', etc. may use a different address
11830     as if addressed by an instruction to access RAM like `LD' or
11831     `STS'. This offset depends on the device architecture and has to
11832     be subtracted from the RAM address in order to get the respective
11833     I/O address.
11834
11835`__WITH_AVRLIBC__'
11836     The compiler is configured to be used together with AVR-Libc.  See
11837     the `--with-avrlibc' configure option.
11838
11839
11840
11841File: gcc.info,  Node: Blackfin Options,  Next: C6X Options,  Prev: AVR Options,  Up: Submodel Options
11842
118433.17.5 Blackfin Options
11844-----------------------
11845
11846`-mcpu=CPU[-SIREVISION]'
11847     Specifies the name of the target Blackfin processor.  Currently,
11848     CPU can be one of `bf512', `bf514', `bf516', `bf518', `bf522',
11849     `bf523', `bf524', `bf525', `bf526', `bf527', `bf531', `bf532',
11850     `bf533', `bf534', `bf536', `bf537', `bf538', `bf539', `bf542',
11851     `bf544', `bf547', `bf548', `bf549', `bf542m', `bf544m', `bf547m',
11852     `bf548m', `bf549m', `bf561', `bf592'.
11853
11854     The optional SIREVISION specifies the silicon revision of the
11855     target Blackfin processor.  Any workarounds available for the
11856     targeted silicon revision are enabled.  If SIREVISION is `none',
11857     no workarounds are enabled.  If SIREVISION is `any', all
11858     workarounds for the targeted processor are enabled.  The
11859     `__SILICON_REVISION__' macro is defined to two hexadecimal digits
11860     representing the major and minor numbers in the silicon revision.
11861     If SIREVISION is `none', the `__SILICON_REVISION__' is not
11862     defined.  If SIREVISION is `any', the `__SILICON_REVISION__' is
11863     defined to be `0xffff'.  If this optional SIREVISION is not used,
11864     GCC assumes the latest known silicon revision of the targeted
11865     Blackfin processor.
11866
11867     GCC defines a preprocessor macro for the specified CPU.  For the
11868     `bfin-elf' toolchain, this option causes the hardware BSP provided
11869     by libgloss to be linked in if `-msim' is not given.
11870
11871     Without this option, `bf532' is used as the processor by default.
11872
11873     Note that support for `bf561' is incomplete.  For `bf561', only
11874     the preprocessor macro is defined.
11875
11876`-msim'
11877     Specifies that the program will be run on the simulator.  This
11878     causes the simulator BSP provided by libgloss to be linked in.
11879     This option has effect only for `bfin-elf' toolchain.  Certain
11880     other options, such as `-mid-shared-library' and `-mfdpic', imply
11881     `-msim'.
11882
11883`-momit-leaf-frame-pointer'
11884     Don't keep the frame pointer in a register for leaf functions.
11885     This avoids the instructions to save, set up and restore frame
11886     pointers and makes an extra register available in leaf functions.
11887     The option `-fomit-frame-pointer' removes the frame pointer for
11888     all functions, which might make debugging harder.
11889
11890`-mspecld-anomaly'
11891     When enabled, the compiler ensures that the generated code does not
11892     contain speculative loads after jump instructions. If this option
11893     is used, `__WORKAROUND_SPECULATIVE_LOADS' is defined.
11894
11895`-mno-specld-anomaly'
11896     Don't generate extra code to prevent speculative loads from
11897     occurring.
11898
11899`-mcsync-anomaly'
11900     When enabled, the compiler ensures that the generated code does not
11901     contain CSYNC or SSYNC instructions too soon after conditional
11902     branches.  If this option is used,
11903     `__WORKAROUND_SPECULATIVE_SYNCS' is defined.
11904
11905`-mno-csync-anomaly'
11906     Don't generate extra code to prevent CSYNC or SSYNC instructions
11907     from occurring too soon after a conditional branch.
11908
11909`-mlow-64k'
11910     When enabled, the compiler is free to take advantage of the
11911     knowledge that the entire program fits into the low 64k of memory.
11912
11913`-mno-low-64k'
11914     Assume that the program is arbitrarily large.  This is the default.
11915
11916`-mstack-check-l1'
11917     Do stack checking using information placed into L1 scratchpad
11918     memory by the uClinux kernel.
11919
11920`-mid-shared-library'
11921     Generate code that supports shared libraries via the library ID
11922     method.  This allows for execute in place and shared libraries in
11923     an environment without virtual memory management.  This option
11924     implies `-fPIC'.  With a `bfin-elf' target, this option implies
11925     `-msim'.
11926
11927`-mno-id-shared-library'
11928     Generate code that doesn't assume ID-based shared libraries are
11929     being used.  This is the default.
11930
11931`-mleaf-id-shared-library'
11932     Generate code that supports shared libraries via the library ID
11933     method, but assumes that this library or executable won't link
11934     against any other ID shared libraries.  That allows the compiler
11935     to use faster code for jumps and calls.
11936
11937`-mno-leaf-id-shared-library'
11938     Do not assume that the code being compiled won't link against any
11939     ID shared libraries.  Slower code is generated for jump and call
11940     insns.
11941
11942`-mshared-library-id=n'
11943     Specifies the identification number of the ID-based shared library
11944     being compiled.  Specifying a value of 0 generates more compact
11945     code; specifying other values forces the allocation of that number
11946     to the current library but is no more space- or time-efficient
11947     than omitting this option.
11948
11949`-msep-data'
11950     Generate code that allows the data segment to be located in a
11951     different area of memory from the text segment.  This allows for
11952     execute in place in an environment without virtual memory
11953     management by eliminating relocations against the text section.
11954
11955`-mno-sep-data'
11956     Generate code that assumes that the data segment follows the text
11957     segment.  This is the default.
11958
11959`-mlong-calls'
11960`-mno-long-calls'
11961     Tells the compiler to perform function calls by first loading the
11962     address of the function into a register and then performing a
11963     subroutine call on this register.  This switch is needed if the
11964     target function lies outside of the 24-bit addressing range of the
11965     offset-based version of subroutine call instruction.
11966
11967     This feature is not enabled by default.  Specifying
11968     `-mno-long-calls' restores the default behavior.  Note these
11969     switches have no effect on how the compiler generates code to
11970     handle function calls via function pointers.
11971
11972`-mfast-fp'
11973     Link with the fast floating-point library. This library relaxes
11974     some of the IEEE floating-point standard's rules for checking
11975     inputs against Not-a-Number (NAN), in the interest of performance.
11976
11977`-minline-plt'
11978     Enable inlining of PLT entries in function calls to functions that
11979     are not known to bind locally.  It has no effect without `-mfdpic'.
11980
11981`-mmulticore'
11982     Build a standalone application for multicore Blackfin processors.
11983     This option causes proper start files and link scripts supporting
11984     multicore to be used, and defines the macro `__BFIN_MULTICORE'.
11985     It can only be used with `-mcpu=bf561[-SIREVISION]'.
11986
11987     This option can be used with `-mcorea' or `-mcoreb', which selects
11988     the one-application-per-core programming model.  Without `-mcorea'
11989     or `-mcoreb', the single-application/dual-core programming model
11990     is used. In this model, the main function of Core B should be
11991     named as `coreb_main'.
11992
11993     If this option is not used, the single-core application programming
11994     model is used.
11995
11996`-mcorea'
11997     Build a standalone application for Core A of BF561 when using the
11998     one-application-per-core programming model. Proper start files and
11999     link scripts are used to support Core A, and the macro
12000     `__BFIN_COREA' is defined.  This option can only be used in
12001     conjunction with `-mmulticore'.
12002
12003`-mcoreb'
12004     Build a standalone application for Core B of BF561 when using the
12005     one-application-per-core programming model. Proper start files and
12006     link scripts are used to support Core B, and the macro
12007     `__BFIN_COREB' is defined. When this option is used, `coreb_main'
12008     should be used instead of `main'.  This option can only be used in
12009     conjunction with `-mmulticore'.
12010
12011`-msdram'
12012     Build a standalone application for SDRAM. Proper start files and
12013     link scripts are used to put the application into SDRAM, and the
12014     macro `__BFIN_SDRAM' is defined.  The loader should initialize
12015     SDRAM before loading the application.
12016
12017`-micplb'
12018     Assume that ICPLBs are enabled at run time.  This has an effect on
12019     certain anomaly workarounds.  For Linux targets, the default is to
12020     assume ICPLBs are enabled; for standalone applications the default
12021     is off.
12022
12023
12024File: gcc.info,  Node: C6X Options,  Next: CRIS Options,  Prev: Blackfin Options,  Up: Submodel Options
12025
120263.17.6 C6X Options
12027------------------
12028
12029`-march=NAME'
12030     This specifies the name of the target architecture.  GCC uses this
12031     name to determine what kind of instructions it can emit when
12032     generating assembly code.  Permissible names are: `c62x', `c64x',
12033     `c64x+', `c67x', `c67x+', `c674x'.
12034
12035`-mbig-endian'
12036     Generate code for a big-endian target.
12037
12038`-mlittle-endian'
12039     Generate code for a little-endian target.  This is the default.
12040
12041`-msim'
12042     Choose startup files and linker script suitable for the simulator.
12043
12044`-msdata=default'
12045     Put small global and static data in the `.neardata' section, which
12046     is pointed to by register `B14'.  Put small uninitialized global
12047     and static data in the `.bss' section, which is adjacent to the
12048     `.neardata' section.  Put small read-only data into the `.rodata'
12049     section.  The corresponding sections used for large pieces of data
12050     are `.fardata', `.far' and `.const'.
12051
12052`-msdata=all'
12053     Put all data, not just small objects, into the sections reserved
12054     for small data, and use addressing relative to the `B14' register
12055     to access them.
12056
12057`-msdata=none'
12058     Make no use of the sections reserved for small data, and use
12059     absolute addresses to access all data.  Put all initialized global
12060     and static data in the `.fardata' section, and all uninitialized
12061     data in the `.far' section.  Put all constant data into the
12062     `.const' section.
12063
12064
12065File: gcc.info,  Node: CRIS Options,  Next: CR16 Options,  Prev: C6X Options,  Up: Submodel Options
12066
120673.17.7 CRIS Options
12068-------------------
12069
12070These options are defined specifically for the CRIS ports.
12071
12072`-march=ARCHITECTURE-TYPE'
12073`-mcpu=ARCHITECTURE-TYPE'
12074     Generate code for the specified architecture.  The choices for
12075     ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively
12076     ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is `v0' except for
12077     cris-axis-linux-gnu, where the default is `v10'.
12078
12079`-mtune=ARCHITECTURE-TYPE'
12080     Tune to ARCHITECTURE-TYPE everything applicable about the generated
12081     code, except for the ABI and the set of available instructions.
12082     The choices for ARCHITECTURE-TYPE are the same as for
12083     `-march=ARCHITECTURE-TYPE'.
12084
12085`-mmax-stack-frame=N'
12086     Warn when the stack frame of a function exceeds N bytes.
12087
12088`-metrax4'
12089`-metrax100'
12090     The options `-metrax4' and `-metrax100' are synonyms for
12091     `-march=v3' and `-march=v8' respectively.
12092
12093`-mmul-bug-workaround'
12094`-mno-mul-bug-workaround'
12095     Work around a bug in the `muls' and `mulu' instructions for CPU
12096     models where it applies.  This option is active by default.
12097
12098`-mpdebug'
12099     Enable CRIS-specific verbose debug-related information in the
12100     assembly code.  This option also has the effect of turning off the
12101     `#NO_APP' formatted-code indicator to the assembler at the
12102     beginning of the assembly file.
12103
12104`-mcc-init'
12105     Do not use condition-code results from previous instruction;
12106     always emit compare and test instructions before use of condition
12107     codes.
12108
12109`-mno-side-effects'
12110     Do not emit instructions with side effects in addressing modes
12111     other than post-increment.
12112
12113`-mstack-align'
12114`-mno-stack-align'
12115`-mdata-align'
12116`-mno-data-align'
12117`-mconst-align'
12118`-mno-const-align'
12119     These options (`no-' options) arrange (eliminate arrangements) for
12120     the stack frame, individual data and constants to be aligned for
12121     the maximum single data access size for the chosen CPU model.  The
12122     default is to arrange for 32-bit alignment.  ABI details such as
12123     structure layout are not affected by these options.
12124
12125`-m32-bit'
12126`-m16-bit'
12127`-m8-bit'
12128     Similar to the stack- data- and const-align options above, these
12129     options arrange for stack frame, writable data and constants to
12130     all be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
12131     alignment.
12132
12133`-mno-prologue-epilogue'
12134`-mprologue-epilogue'
12135     With `-mno-prologue-epilogue', the normal function prologue and
12136     epilogue which set up the stack frame are omitted and no return
12137     instructions or return sequences are generated in the code.  Use
12138     this option only together with visual inspection of the compiled
12139     code: no warnings or errors are generated when call-saved
12140     registers must be saved, or storage for local variables needs to
12141     be allocated.
12142
12143`-mno-gotplt'
12144`-mgotplt'
12145     With `-fpic' and `-fPIC', don't generate (do generate) instruction
12146     sequences that load addresses for functions from the PLT part of
12147     the GOT rather than (traditional on other architectures) calls to
12148     the PLT.  The default is `-mgotplt'.
12149
12150`-melf'
12151     Legacy no-op option only recognized with the cris-axis-elf and
12152     cris-axis-linux-gnu targets.
12153
12154`-mlinux'
12155     Legacy no-op option only recognized with the cris-axis-linux-gnu
12156     target.
12157
12158`-sim'
12159     This option, recognized for the cris-axis-elf, arranges to link
12160     with input-output functions from a simulator library.  Code,
12161     initialized data and zero-initialized data are allocated
12162     consecutively.
12163
12164`-sim2'
12165     Like `-sim', but pass linker options to locate initialized data at
12166     0x40000000 and zero-initialized data at 0x80000000.
12167
12168
12169File: gcc.info,  Node: CR16 Options,  Next: Darwin Options,  Prev: CRIS Options,  Up: Submodel Options
12170
121713.17.8 CR16 Options
12172-------------------
12173
12174These options are defined specifically for the CR16 ports.
12175
12176`-mmac'
12177     Enable the use of multiply-accumulate instructions. Disabled by
12178     default.
12179
12180`-mcr16cplus'
12181`-mcr16c'
12182     Generate code for CR16C or CR16C+ architecture. CR16C+ architecture
12183     is default.
12184
12185`-msim'
12186     Links the library libsim.a which is in compatible with simulator.
12187     Applicable to ELF compiler only.
12188
12189`-mint32'
12190     Choose integer type as 32-bit wide.
12191
12192`-mbit-ops'
12193     Generates `sbit'/`cbit' instructions for bit manipulations.
12194
12195`-mdata-model=MODEL'
12196     Choose a data model. The choices for MODEL are `near', `far' or
12197     `medium'. `medium' is default.  However, `far' is not valid with
12198     `-mcr16c', as the CR16C architecture does not support the far data
12199     model.
12200
12201
12202File: gcc.info,  Node: Darwin Options,  Next: DEC Alpha Options,  Prev: CR16 Options,  Up: Submodel Options
12203
122043.17.9 Darwin Options
12205---------------------
12206
12207These options are defined for all architectures running the Darwin
12208operating system.
12209
12210 FSF GCC on Darwin does not create "fat" object files; it creates an
12211object file for the single architecture that GCC was built to target.
12212Apple's GCC on Darwin does create "fat" files if multiple `-arch'
12213options are used; it does so by running the compiler or linker multiple
12214times and joining the results together with `lipo'.
12215
12216 The subtype of the file created (like `ppc7400' or `ppc970' or `i686')
12217is determined by the flags that specify the ISA that GCC is targeting,
12218like `-mcpu' or `-march'.  The `-force_cpusubtype_ALL' option can be
12219used to override this.
12220
12221 The Darwin tools vary in their behavior when presented with an ISA
12222mismatch.  The assembler, `as', only permits instructions to be used
12223that are valid for the subtype of the file it is generating, so you
12224cannot put 64-bit instructions in a `ppc750' object file.  The linker
12225for shared libraries, `/usr/bin/libtool', fails and prints an error if
12226asked to create a shared library with a less restrictive subtype than
12227its input files (for instance, trying to put a `ppc970' object file in
12228a `ppc7400' library).  The linker for executables, `ld', quietly gives
12229the executable the most restrictive subtype of any of its input files.
12230
12231`-FDIR'
12232     Add the framework directory DIR to the head of the list of
12233     directories to be searched for header files.  These directories are
12234     interleaved with those specified by `-I' options and are scanned
12235     in a left-to-right order.
12236
12237     A framework directory is a directory with frameworks in it.  A
12238     framework is a directory with a `Headers' and/or `PrivateHeaders'
12239     directory contained directly in it that ends in `.framework'.  The
12240     name of a framework is the name of this directory excluding the
12241     `.framework'.  Headers associated with the framework are found in
12242     one of those two directories, with `Headers' being searched first.
12243     A subframework is a framework directory that is in a framework's
12244     `Frameworks' directory.  Includes of subframework headers can only
12245     appear in a header of a framework that contains the subframework,
12246     or in a sibling subframework header.  Two subframeworks are
12247     siblings if they occur in the same framework.  A subframework
12248     should not have the same name as a framework; a warning is issued
12249     if this is violated.  Currently a subframework cannot have
12250     subframeworks; in the future, the mechanism may be extended to
12251     support this.  The standard frameworks can be found in
12252     `/System/Library/Frameworks' and `/Library/Frameworks'.  An
12253     example include looks like `#include <Framework/header.h>', where
12254     `Framework' denotes the name of the framework and `header.h' is
12255     found in the `PrivateHeaders' or `Headers' directory.
12256
12257`-iframeworkDIR'
12258     Like `-F' except the directory is a treated as a system directory.
12259     The main difference between this `-iframework' and `-F' is that
12260     with `-iframework' the compiler does not warn about constructs
12261     contained within header files found via DIR.  This option is valid
12262     only for the C family of languages.
12263
12264`-gused'
12265     Emit debugging information for symbols that are used.  For stabs
12266     debugging format, this enables `-feliminate-unused-debug-symbols'.
12267     This is by default ON.
12268
12269`-gfull'
12270     Emit debugging information for all symbols and types.
12271
12272`-mmacosx-version-min=VERSION'
12273     The earliest version of MacOS X that this executable will run on
12274     is VERSION.  Typical values of VERSION include `10.1', `10.2', and
12275     `10.3.9'.
12276
12277     If the compiler was built to use the system's headers by default,
12278     then the default for this option is the system version on which the
12279     compiler is running, otherwise the default is to make choices that
12280     are compatible with as many systems and code bases as possible.
12281
12282`-mkernel'
12283     Enable kernel development mode.  The `-mkernel' option sets
12284     `-static', `-fno-common', `-fno-use-cxa-atexit',
12285     `-fno-exceptions', `-fno-non-call-exceptions', `-fapple-kext',
12286     `-fno-weak' and `-fno-rtti' where applicable.  This mode also sets
12287     `-mno-altivec', `-msoft-float', `-fno-builtin' and `-mlong-branch'
12288     for PowerPC targets.
12289
12290`-mone-byte-bool'
12291     Override the defaults for `bool' so that `sizeof(bool)==1'.  By
12292     default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC
12293     and `1' when compiling for Darwin/x86, so this option has no
12294     effect on x86.
12295
12296     *Warning:* The `-mone-byte-bool' switch causes GCC to generate
12297     code that is not binary compatible with code generated without
12298     that switch.  Using this switch may require recompiling all other
12299     modules in a program, including system libraries.  Use this switch
12300     to conform to a non-default data model.
12301
12302`-mfix-and-continue'
12303`-ffix-and-continue'
12304`-findirect-data'
12305     Generate code suitable for fast turnaround development, such as to
12306     allow GDB to dynamically load `.o' files into already-running
12307     programs.  `-findirect-data' and `-ffix-and-continue' are provided
12308     for backwards compatibility.
12309
12310`-all_load'
12311     Loads all members of static archive libraries.  See man ld(1) for
12312     more information.
12313
12314`-arch_errors_fatal'
12315     Cause the errors having to do with files that have the wrong
12316     architecture to be fatal.
12317
12318`-bind_at_load'
12319     Causes the output file to be marked such that the dynamic linker
12320     will bind all undefined references when the file is loaded or
12321     launched.
12322
12323`-bundle'
12324     Produce a Mach-o bundle format file.  See man ld(1) for more
12325     information.
12326
12327`-bundle_loader EXECUTABLE'
12328     This option specifies the EXECUTABLE that will load the build
12329     output file being linked.  See man ld(1) for more information.
12330
12331`-dynamiclib'
12332     When passed this option, GCC produces a dynamic library instead of
12333     an executable when linking, using the Darwin `libtool' command.
12334
12335`-force_cpusubtype_ALL'
12336     This causes GCC's output file to have the ALL subtype, instead of
12337     one controlled by the `-mcpu' or `-march' option.
12338
12339`-allowable_client  CLIENT_NAME'
12340`-client_name'
12341`-compatibility_version'
12342`-current_version'
12343`-dead_strip'
12344`-dependency-file'
12345`-dylib_file'
12346`-dylinker_install_name'
12347`-dynamic'
12348`-exported_symbols_list'
12349`-filelist'
12350`-flat_namespace'
12351`-force_flat_namespace'
12352`-headerpad_max_install_names'
12353`-image_base'
12354`-init'
12355`-install_name'
12356`-keep_private_externs'
12357`-multi_module'
12358`-multiply_defined'
12359`-multiply_defined_unused'
12360`-noall_load'
12361`-no_dead_strip_inits_and_terms'
12362`-nofixprebinding'
12363`-nomultidefs'
12364`-noprebind'
12365`-noseglinkedit'
12366`-pagezero_size'
12367`-prebind'
12368`-prebind_all_twolevel_modules'
12369`-private_bundle'
12370`-read_only_relocs'
12371`-sectalign'
12372`-sectobjectsymbols'
12373`-whyload'
12374`-seg1addr'
12375`-sectcreate'
12376`-sectobjectsymbols'
12377`-sectorder'
12378`-segaddr'
12379`-segs_read_only_addr'
12380`-segs_read_write_addr'
12381`-seg_addr_table'
12382`-seg_addr_table_filename'
12383`-seglinkedit'
12384`-segprot'
12385`-segs_read_only_addr'
12386`-segs_read_write_addr'
12387`-single_module'
12388`-static'
12389`-sub_library'
12390`-sub_umbrella'
12391`-twolevel_namespace'
12392`-umbrella'
12393`-undefined'
12394`-unexported_symbols_list'
12395`-weak_reference_mismatches'
12396`-whatsloaded'
12397     These options are passed to the Darwin linker.  The Darwin linker
12398     man page describes them in detail.
12399
12400
12401File: gcc.info,  Node: DEC Alpha Options,  Next: FR30 Options,  Prev: Darwin Options,  Up: Submodel Options
12402
124033.17.10 DEC Alpha Options
12404-------------------------
12405
12406These `-m' options are defined for the DEC Alpha implementations:
12407
12408`-mno-soft-float'
12409`-msoft-float'
12410     Use (do not use) the hardware floating-point instructions for
12411     floating-point operations.  When `-msoft-float' is specified,
12412     functions in `libgcc.a' are used to perform floating-point
12413     operations.  Unless they are replaced by routines that emulate the
12414     floating-point operations, or compiled in such a way as to call
12415     such emulations routines, these routines issue floating-point
12416     operations.   If you are compiling for an Alpha without
12417     floating-point operations, you must ensure that the library is
12418     built so as not to call them.
12419
12420     Note that Alpha implementations without floating-point operations
12421     are required to have floating-point registers.
12422
12423`-mfp-reg'
12424`-mno-fp-regs'
12425     Generate code that uses (does not use) the floating-point register
12426     set.  `-mno-fp-regs' implies `-msoft-float'.  If the floating-point
12427     register set is not used, floating-point operands are passed in
12428     integer registers as if they were integers and floating-point
12429     results are passed in `$0' instead of `$f0'.  This is a
12430     non-standard calling sequence, so any function with a
12431     floating-point argument or return value called by code compiled
12432     with `-mno-fp-regs' must also be compiled with that option.
12433
12434     A typical use of this option is building a kernel that does not
12435     use, and hence need not save and restore, any floating-point
12436     registers.
12437
12438`-mieee'
12439     The Alpha architecture implements floating-point hardware
12440     optimized for maximum performance.  It is mostly compliant with
12441     the IEEE floating-point standard.  However, for full compliance,
12442     software assistance is required.  This option generates code fully
12443     IEEE-compliant code _except_ that the INEXACT-FLAG is not
12444     maintained (see below).  If this option is turned on, the
12445     preprocessor macro `_IEEE_FP' is defined during compilation.  The
12446     resulting code is less efficient but is able to correctly support
12447     denormalized numbers and exceptional IEEE values such as
12448     not-a-number and plus/minus infinity.  Other Alpha compilers call
12449     this option `-ieee_with_no_inexact'.
12450
12451`-mieee-with-inexact'
12452     This is like `-mieee' except the generated code also maintains the
12453     IEEE INEXACT-FLAG.  Turning on this option causes the generated
12454     code to implement fully-compliant IEEE math.  In addition to
12455     `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro.
12456     On some Alpha implementations the resulting code may execute
12457     significantly slower than the code generated by default.  Since
12458     there is very little code that depends on the INEXACT-FLAG, you
12459     should normally not specify this option.  Other Alpha compilers
12460     call this option `-ieee_with_inexact'.
12461
12462`-mfp-trap-mode=TRAP-MODE'
12463     This option controls what floating-point related traps are enabled.
12464     Other Alpha compilers call this option `-fptm TRAP-MODE'.  The
12465     trap mode can be set to one of four values:
12466
12467    `n'
12468          This is the default (normal) setting.  The only traps that
12469          are enabled are the ones that cannot be disabled in software
12470          (e.g., division by zero trap).
12471
12472    `u'
12473          In addition to the traps enabled by `n', underflow traps are
12474          enabled as well.
12475
12476    `su'
12477          Like `u', but the instructions are marked to be safe for
12478          software completion (see Alpha architecture manual for
12479          details).
12480
12481    `sui'
12482          Like `su', but inexact traps are enabled as well.
12483
12484`-mfp-rounding-mode=ROUNDING-MODE'
12485     Selects the IEEE rounding mode.  Other Alpha compilers call this
12486     option `-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
12487
12488    `n'
12489          Normal IEEE rounding mode.  Floating-point numbers are
12490          rounded towards the nearest machine number or towards the
12491          even machine number in case of a tie.
12492
12493    `m'
12494          Round towards minus infinity.
12495
12496    `c'
12497          Chopped rounding mode.  Floating-point numbers are rounded
12498          towards zero.
12499
12500    `d'
12501          Dynamic rounding mode.  A field in the floating-point control
12502          register (FPCR, see Alpha architecture reference manual)
12503          controls the rounding mode in effect.  The C library
12504          initializes this register for rounding towards plus infinity.
12505          Thus, unless your program modifies the FPCR, `d' corresponds
12506          to round towards plus infinity.
12507
12508`-mtrap-precision=TRAP-PRECISION'
12509     In the Alpha architecture, floating-point traps are imprecise.
12510     This means without software assistance it is impossible to recover
12511     from a floating trap and program execution normally needs to be
12512     terminated.  GCC can generate code that can assist operating
12513     system trap handlers in determining the exact location that caused
12514     a floating-point trap.  Depending on the requirements of an
12515     application, different levels of precisions can be selected:
12516
12517    `p'
12518          Program precision.  This option is the default and means a
12519          trap handler can only identify which program caused a
12520          floating-point exception.
12521
12522    `f'
12523          Function precision.  The trap handler can determine the
12524          function that caused a floating-point exception.
12525
12526    `i'
12527          Instruction precision.  The trap handler can determine the
12528          exact instruction that caused a floating-point exception.
12529
12530     Other Alpha compilers provide the equivalent options called
12531     `-scope_safe' and `-resumption_safe'.
12532
12533`-mieee-conformant'
12534     This option marks the generated code as IEEE conformant.  You must
12535     not use this option unless you also specify `-mtrap-precision=i'
12536     and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'.  Its only
12537     effect is to emit the line `.eflag 48' in the function prologue of
12538     the generated assembly file.
12539
12540`-mbuild-constants'
12541     Normally GCC examines a 32- or 64-bit integer constant to see if
12542     it can construct it from smaller constants in two or three
12543     instructions.  If it cannot, it outputs the constant as a literal
12544     and generates code to load it from the data segment at run time.
12545
12546     Use this option to require GCC to construct _all_ integer constants
12547     using code, even if it takes more instructions (the maximum is
12548     six).
12549
12550     You typically use this option to build a shared library dynamic
12551     loader.  Itself a shared library, it must relocate itself in memory
12552     before it can find the variables and constants in its own data
12553     segment.
12554
12555`-mbwx'
12556`-mno-bwx'
12557`-mcix'
12558`-mno-cix'
12559`-mfix'
12560`-mno-fix'
12561`-mmax'
12562`-mno-max'
12563     Indicate whether GCC should generate code to use the optional BWX,
12564     CIX, FIX and MAX instruction sets.  The default is to use the
12565     instruction sets supported by the CPU type specified via `-mcpu='
12566     option or that of the CPU on which GCC was built if none is
12567     specified.
12568
12569`-mfloat-vax'
12570`-mfloat-ieee'
12571     Generate code that uses (does not use) VAX F and G floating-point
12572     arithmetic instead of IEEE single and double precision.
12573
12574`-mexplicit-relocs'
12575`-mno-explicit-relocs'
12576     Older Alpha assemblers provided no way to generate symbol
12577     relocations except via assembler macros.  Use of these macros does
12578     not allow optimal instruction scheduling.  GNU binutils as of
12579     version 2.12 supports a new syntax that allows the compiler to
12580     explicitly mark which relocations should apply to which
12581     instructions.  This option is mostly useful for debugging, as GCC
12582     detects the capabilities of the assembler when it is built and
12583     sets the default accordingly.
12584
12585`-msmall-data'
12586`-mlarge-data'
12587     When `-mexplicit-relocs' is in effect, static data is accessed via
12588     "gp-relative" relocations.  When `-msmall-data' is used, objects 8
12589     bytes long or smaller are placed in a "small data area" (the
12590     `.sdata' and `.sbss' sections) and are accessed via 16-bit
12591     relocations off of the `$gp' register.  This limits the size of
12592     the small data area to 64KB, but allows the variables to be
12593     directly accessed via a single instruction.
12594
12595     The default is `-mlarge-data'.  With this option the data area is
12596     limited to just below 2GB.  Programs that require more than 2GB of
12597     data must use `malloc' or `mmap' to allocate the data in the heap
12598     instead of in the program's data segment.
12599
12600     When generating code for shared libraries, `-fpic' implies
12601     `-msmall-data' and `-fPIC' implies `-mlarge-data'.
12602
12603`-msmall-text'
12604`-mlarge-text'
12605     When `-msmall-text' is used, the compiler assumes that the code of
12606     the entire program (or shared library) fits in 4MB, and is thus
12607     reachable with a branch instruction.  When `-msmall-data' is used,
12608     the compiler can assume that all local symbols share the same
12609     `$gp' value, and thus reduce the number of instructions required
12610     for a function call from 4 to 1.
12611
12612     The default is `-mlarge-text'.
12613
12614`-mcpu=CPU_TYPE'
12615     Set the instruction set and instruction scheduling parameters for
12616     machine type CPU_TYPE.  You can specify either the `EV' style name
12617     or the corresponding chip number.  GCC supports scheduling
12618     parameters for the EV4, EV5 and EV6 family of processors and
12619     chooses the default values for the instruction set from the
12620     processor you specify.  If you do not specify a processor type,
12621     GCC defaults to the processor on which the compiler was built.
12622
12623     Supported values for CPU_TYPE are
12624
12625    `ev4'
12626    `ev45'
12627    `21064'
12628          Schedules as an EV4 and has no instruction set extensions.
12629
12630    `ev5'
12631    `21164'
12632          Schedules as an EV5 and has no instruction set extensions.
12633
12634    `ev56'
12635    `21164a'
12636          Schedules as an EV5 and supports the BWX extension.
12637
12638    `pca56'
12639    `21164pc'
12640    `21164PC'
12641          Schedules as an EV5 and supports the BWX and MAX extensions.
12642
12643    `ev6'
12644    `21264'
12645          Schedules as an EV6 and supports the BWX, FIX, and MAX
12646          extensions.
12647
12648    `ev67'
12649    `21264a'
12650          Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
12651          extensions.
12652
12653     Native toolchains also support the value `native', which selects
12654     the best architecture option for the host processor.
12655     `-mcpu=native' has no effect if GCC does not recognize the
12656     processor.
12657
12658`-mtune=CPU_TYPE'
12659     Set only the instruction scheduling parameters for machine type
12660     CPU_TYPE.  The instruction set is not changed.
12661
12662     Native toolchains also support the value `native', which selects
12663     the best architecture option for the host processor.
12664     `-mtune=native' has no effect if GCC does not recognize the
12665     processor.
12666
12667`-mmemory-latency=TIME'
12668     Sets the latency the scheduler should assume for typical memory
12669     references as seen by the application.  This number is highly
12670     dependent on the memory access patterns used by the application
12671     and the size of the external cache on the machine.
12672
12673     Valid options for TIME are
12674
12675    `NUMBER'
12676          A decimal number representing clock cycles.
12677
12678    `L1'
12679    `L2'
12680    `L3'
12681    `main'
12682          The compiler contains estimates of the number of clock cycles
12683          for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
12684          (also called Dcache, Scache, and Bcache), as well as to main
12685          memory.  Note that L3 is only valid for EV5.
12686
12687
12688
12689File: gcc.info,  Node: FR30 Options,  Next: FRV Options,  Prev: DEC Alpha Options,  Up: Submodel Options
12690
126913.17.11 FR30 Options
12692--------------------
12693
12694These options are defined specifically for the FR30 port.
12695
12696`-msmall-model'
12697     Use the small address space model.  This can produce smaller code,
12698     but it does assume that all symbolic values and addresses fit into
12699     a 20-bit range.
12700
12701`-mno-lsim'
12702     Assume that runtime support has been provided and so there is no
12703     need to include the simulator library (`libsim.a') on the linker
12704     command line.
12705
12706
12707
12708File: gcc.info,  Node: FRV Options,  Next: GNU/Linux Options,  Prev: FR30 Options,  Up: Submodel Options
12709
127103.17.12 FRV Options
12711-------------------
12712
12713`-mgpr-32'
12714     Only use the first 32 general-purpose registers.
12715
12716`-mgpr-64'
12717     Use all 64 general-purpose registers.
12718
12719`-mfpr-32'
12720     Use only the first 32 floating-point registers.
12721
12722`-mfpr-64'
12723     Use all 64 floating-point registers.
12724
12725`-mhard-float'
12726     Use hardware instructions for floating-point operations.
12727
12728`-msoft-float'
12729     Use library routines for floating-point operations.
12730
12731`-malloc-cc'
12732     Dynamically allocate condition code registers.
12733
12734`-mfixed-cc'
12735     Do not try to dynamically allocate condition code registers, only
12736     use `icc0' and `fcc0'.
12737
12738`-mdword'
12739     Change ABI to use double word insns.
12740
12741`-mno-dword'
12742     Do not use double word instructions.
12743
12744`-mdouble'
12745     Use floating-point double instructions.
12746
12747`-mno-double'
12748     Do not use floating-point double instructions.
12749
12750`-mmedia'
12751     Use media instructions.
12752
12753`-mno-media'
12754     Do not use media instructions.
12755
12756`-mmuladd'
12757     Use multiply and add/subtract instructions.
12758
12759`-mno-muladd'
12760     Do not use multiply and add/subtract instructions.
12761
12762`-mfdpic'
12763     Select the FDPIC ABI, which uses function descriptors to represent
12764     pointers to functions.  Without any PIC/PIE-related options, it
12765     implies `-fPIE'.  With `-fpic' or `-fpie', it assumes GOT entries
12766     and small data are within a 12-bit range from the GOT base
12767     address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32
12768     bits.  With a `bfin-elf' target, this option implies `-msim'.
12769
12770`-minline-plt'
12771     Enable inlining of PLT entries in function calls to functions that
12772     are not known to bind locally.  It has no effect without `-mfdpic'.
12773     It's enabled by default if optimizing for speed and compiling for
12774     shared libraries (i.e., `-fPIC' or `-fpic'), or when an
12775     optimization option such as `-O3' or above is present in the
12776     command line.
12777
12778`-mTLS'
12779     Assume a large TLS segment when generating thread-local code.
12780
12781`-mtls'
12782     Do not assume a large TLS segment when generating thread-local
12783     code.
12784
12785`-mgprel-ro'
12786     Enable the use of `GPREL' relocations in the FDPIC ABI for data
12787     that is known to be in read-only sections.  It's enabled by
12788     default, except for `-fpic' or `-fpie': even though it may help
12789     make the global offset table smaller, it trades 1 instruction for
12790     4.  With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one
12791     of which may be shared by multiple symbols, and it avoids the need
12792     for a GOT entry for the referenced symbol, so it's more likely to
12793     be a win.  If it is not, `-mno-gprel-ro' can be used to disable it.
12794
12795`-multilib-library-pic'
12796     Link with the (library, not FD) pic libraries.  It's implied by
12797     `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without
12798     `-mfdpic'.  You should never have to use it explicitly.
12799
12800`-mlinked-fp'
12801     Follow the EABI requirement of always creating a frame pointer
12802     whenever a stack frame is allocated.  This option is enabled by
12803     default and can be disabled with `-mno-linked-fp'.
12804
12805`-mlong-calls'
12806     Use indirect addressing to call functions outside the current
12807     compilation unit.  This allows the functions to be placed anywhere
12808     within the 32-bit address space.
12809
12810`-malign-labels'
12811     Try to align labels to an 8-byte boundary by inserting NOPs into
12812     the previous packet.  This option only has an effect when VLIW
12813     packing is enabled.  It doesn't create new packets; it merely adds
12814     NOPs to existing ones.
12815
12816`-mlibrary-pic'
12817     Generate position-independent EABI code.
12818
12819`-macc-4'
12820     Use only the first four media accumulator registers.
12821
12822`-macc-8'
12823     Use all eight media accumulator registers.
12824
12825`-mpack'
12826     Pack VLIW instructions.
12827
12828`-mno-pack'
12829     Do not pack VLIW instructions.
12830
12831`-mno-eflags'
12832     Do not mark ABI switches in e_flags.
12833
12834`-mcond-move'
12835     Enable the use of conditional-move instructions (default).
12836
12837     This switch is mainly for debugging the compiler and will likely
12838     be removed in a future version.
12839
12840`-mno-cond-move'
12841     Disable the use of conditional-move instructions.
12842
12843     This switch is mainly for debugging the compiler and will likely
12844     be removed in a future version.
12845
12846`-mscc'
12847     Enable the use of conditional set instructions (default).
12848
12849     This switch is mainly for debugging the compiler and will likely
12850     be removed in a future version.
12851
12852`-mno-scc'
12853     Disable the use of conditional set instructions.
12854
12855     This switch is mainly for debugging the compiler and will likely
12856     be removed in a future version.
12857
12858`-mcond-exec'
12859     Enable the use of conditional execution (default).
12860
12861     This switch is mainly for debugging the compiler and will likely
12862     be removed in a future version.
12863
12864`-mno-cond-exec'
12865     Disable the use of conditional execution.
12866
12867     This switch is mainly for debugging the compiler and will likely
12868     be removed in a future version.
12869
12870`-mvliw-branch'
12871     Run a pass to pack branches into VLIW instructions (default).
12872
12873     This switch is mainly for debugging the compiler and will likely
12874     be removed in a future version.
12875
12876`-mno-vliw-branch'
12877     Do not run a pass to pack branches into VLIW instructions.
12878
12879     This switch is mainly for debugging the compiler and will likely
12880     be removed in a future version.
12881
12882`-mmulti-cond-exec'
12883     Enable optimization of `&&' and `||' in conditional execution
12884     (default).
12885
12886     This switch is mainly for debugging the compiler and will likely
12887     be removed in a future version.
12888
12889`-mno-multi-cond-exec'
12890     Disable optimization of `&&' and `||' in conditional execution.
12891
12892     This switch is mainly for debugging the compiler and will likely
12893     be removed in a future version.
12894
12895`-mnested-cond-exec'
12896     Enable nested conditional execution optimizations (default).
12897
12898     This switch is mainly for debugging the compiler and will likely
12899     be removed in a future version.
12900
12901`-mno-nested-cond-exec'
12902     Disable nested conditional execution optimizations.
12903
12904     This switch is mainly for debugging the compiler and will likely
12905     be removed in a future version.
12906
12907`-moptimize-membar'
12908     This switch removes redundant `membar' instructions from the
12909     compiler-generated code.  It is enabled by default.
12910
12911`-mno-optimize-membar'
12912     This switch disables the automatic removal of redundant `membar'
12913     instructions from the generated code.
12914
12915`-mtomcat-stats'
12916     Cause gas to print out tomcat statistics.
12917
12918`-mcpu=CPU'
12919     Select the processor type for which to generate code.  Possible
12920     values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405',
12921     `fr400', `fr300' and `simple'.
12922
12923
12924
12925File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options
12926
129273.17.13 GNU/Linux Options
12928-------------------------
12929
12930These `-m' options are defined for GNU/Linux targets:
12931
12932`-mglibc'
12933     Use the GNU C library.  This is the default except on
12934     `*-*-linux-*uclibc*' and `*-*-linux-*android*' targets.
12935
12936`-muclibc'
12937     Use uClibc C library.  This is the default on `*-*-linux-*uclibc*'
12938     targets.
12939
12940`-mbionic'
12941     Use Bionic C library.  This is the default on
12942     `*-*-linux-*android*' targets.
12943
12944`-mandroid'
12945     Compile code compatible with Android platform.  This is the
12946     default on `*-*-linux-*android*' targets.
12947
12948     When compiling, this option enables `-mbionic', `-fPIC',
12949     `-fno-exceptions' and `-fno-rtti' by default.  When linking, this
12950     option makes the GCC driver pass Android-specific options to the
12951     linker.  Finally, this option causes the preprocessor macro
12952     `__ANDROID__' to be defined.
12953
12954`-tno-android-cc'
12955     Disable compilation effects of `-mandroid', i.e., do not enable
12956     `-mbionic', `-fPIC', `-fno-exceptions' and `-fno-rtti' by default.
12957
12958`-tno-android-ld'
12959     Disable linking effects of `-mandroid', i.e., pass standard Linux
12960     linking options to the linker.
12961
12962
12963
12964File: gcc.info,  Node: H8/300 Options,  Next: HPPA Options,  Prev: GNU/Linux Options,  Up: Submodel Options
12965
129663.17.14 H8/300 Options
12967----------------------
12968
12969These `-m' options are defined for the H8/300 implementations:
12970
12971`-mrelax'
12972     Shorten some address references at link time, when possible; uses
12973     the linker option `-relax'.  *Note `ld' and the H8/300:
12974     (ld)H8/300, for a fuller description.
12975
12976`-mh'
12977     Generate code for the H8/300H.
12978
12979`-ms'
12980     Generate code for the H8S.
12981
12982`-mn'
12983     Generate code for the H8S and H8/300H in the normal mode.  This
12984     switch must be used either with `-mh' or `-ms'.
12985
12986`-ms2600'
12987     Generate code for the H8S/2600.  This switch must be used with
12988     `-ms'.
12989
12990`-mexr'
12991     Extended registers are stored on stack before execution of function
12992     with monitor attribute. Default option is `-mexr'.  This option is
12993     valid only for H8S targets.
12994
12995`-mno-exr'
12996     Extended registers are not stored on stack before execution of
12997     function with monitor attribute. Default option is `-mno-exr'.
12998     This option is valid only for H8S targets.
12999
13000`-mint32'
13001     Make `int' data 32 bits by default.
13002
13003`-malign-300'
13004     On the H8/300H and H8S, use the same alignment rules as for the
13005     H8/300.  The default for the H8/300H and H8S is to align longs and
13006     floats on 4-byte boundaries.  `-malign-300' causes them to be
13007     aligned on 2-byte boundaries.  This option has no effect on the
13008     H8/300.
13009
13010
13011File: gcc.info,  Node: HPPA Options,  Next: i386 and x86-64 Options,  Prev: H8/300 Options,  Up: Submodel Options
13012
130133.17.15 HPPA Options
13014--------------------
13015
13016These `-m' options are defined for the HPPA family of computers:
13017
13018`-march=ARCHITECTURE-TYPE'
13019     Generate code for the specified architecture.  The choices for
13020     ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and
13021     `2.0' for PA 2.0 processors.  Refer to `/usr/lib/sched.models' on
13022     an HP-UX system to determine the proper architecture option for
13023     your machine.  Code compiled for lower numbered architectures runs
13024     on higher numbered architectures, but not the other way around.
13025
13026`-mpa-risc-1-0'
13027`-mpa-risc-1-1'
13028`-mpa-risc-2-0'
13029     Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0'
13030     respectively.
13031
13032`-mbig-switch'
13033     Generate code suitable for big switch tables.  Use this option
13034     only if the assembler/linker complain about out-of-range branches
13035     within a switch table.
13036
13037`-mjump-in-delay'
13038     Fill delay slots of function calls with unconditional jump
13039     instructions by modifying the return pointer for the function call
13040     to be the target of the conditional jump.
13041
13042`-mdisable-fpregs'
13043     Prevent floating-point registers from being used in any manner.
13044     This is necessary for compiling kernels that perform lazy context
13045     switching of floating-point registers.  If you use this option and
13046     attempt to perform floating-point operations, the compiler aborts.
13047
13048`-mdisable-indexing'
13049     Prevent the compiler from using indexing address modes.  This
13050     avoids some rather obscure problems when compiling MIG generated
13051     code under MACH.
13052
13053`-mno-space-regs'
13054     Generate code that assumes the target has no space registers.
13055     This allows GCC to generate faster indirect calls and use unscaled
13056     index address modes.
13057
13058     Such code is suitable for level 0 PA systems and kernels.
13059
13060`-mfast-indirect-calls'
13061     Generate code that assumes calls never cross space boundaries.
13062     This allows GCC to emit code that performs faster indirect calls.
13063
13064     This option does not work in the presence of shared libraries or
13065     nested functions.
13066
13067`-mfixed-range=REGISTER-RANGE'
13068     Generate code treating the given register range as fixed registers.
13069     A fixed register is one that the register allocator cannot use.
13070     This is useful when compiling kernel code.  A register range is
13071     specified as two registers separated by a dash.  Multiple register
13072     ranges can be specified separated by a comma.
13073
13074`-mlong-load-store'
13075     Generate 3-instruction load and store sequences as sometimes
13076     required by the HP-UX 10 linker.  This is equivalent to the `+k'
13077     option to the HP compilers.
13078
13079`-mportable-runtime'
13080     Use the portable calling conventions proposed by HP for ELF
13081     systems.
13082
13083`-mgas'
13084     Enable the use of assembler directives only GAS understands.
13085
13086`-mschedule=CPU-TYPE'
13087     Schedule code according to the constraints for the machine type
13088     CPU-TYPE.  The choices for CPU-TYPE are `700' `7100', `7100LC',
13089     `7200', `7300' and `8000'.  Refer to `/usr/lib/sched.models' on an
13090     HP-UX system to determine the proper scheduling option for your
13091     machine.  The default scheduling is `8000'.
13092
13093`-mlinker-opt'
13094     Enable the optimization pass in the HP-UX linker.  Note this makes
13095     symbolic debugging impossible.  It also triggers a bug in the
13096     HP-UX 8 and HP-UX 9 linkers in which they give bogus error
13097     messages when linking some programs.
13098
13099`-msoft-float'
13100     Generate output containing library calls for floating point.
13101     *Warning:* the requisite libraries are not available for all HPPA
13102     targets.  Normally the facilities of the machine's usual C
13103     compiler are used, but this cannot be done directly in
13104     cross-compilation.  You must make your own arrangements to provide
13105     suitable library functions for cross-compilation.
13106
13107     `-msoft-float' changes the calling convention in the output file;
13108     therefore, it is only useful if you compile _all_ of a program with
13109     this option.  In particular, you need to compile `libgcc.a', the
13110     library that comes with GCC, with `-msoft-float' in order for this
13111     to work.
13112
13113`-msio'
13114     Generate the predefine, `_SIO', for server IO.  The default is
13115     `-mwsio'.  This generates the predefines, `__hp9000s700',
13116     `__hp9000s700__' and `_WSIO', for workstation IO.  These options
13117     are available under HP-UX and HI-UX.
13118
13119`-mgnu-ld'
13120     Use options specific to GNU `ld'.  This passes `-shared' to `ld'
13121     when building a shared library.  It is the default when GCC is
13122     configured, explicitly or implicitly, with the GNU linker.  This
13123     option does not affect which `ld' is called; it only changes what
13124     parameters are passed to that `ld'.  The `ld' that is called is
13125     determined by the `--with-ld' configure option, GCC's program
13126     search path, and finally by the user's `PATH'.  The linker used by
13127     GCC can be printed using `which `gcc -print-prog-name=ld`'.  This
13128     option is only available on the 64-bit HP-UX GCC, i.e. configured
13129     with `hppa*64*-*-hpux*'.
13130
13131`-mhp-ld'
13132     Use options specific to HP `ld'.  This passes `-b' to `ld' when
13133     building a shared library and passes `+Accept TypeMismatch' to
13134     `ld' on all links.  It is the default when GCC is configured,
13135     explicitly or implicitly, with the HP linker.  This option does
13136     not affect which `ld' is called; it only changes what parameters
13137     are passed to that `ld'.  The `ld' that is called is determined by
13138     the `--with-ld' configure option, GCC's program search path, and
13139     finally by the user's `PATH'.  The linker used by GCC can be
13140     printed using `which `gcc -print-prog-name=ld`'.  This option is
13141     only available on the 64-bit HP-UX GCC, i.e. configured with
13142     `hppa*64*-*-hpux*'.
13143
13144`-mlong-calls'
13145     Generate code that uses long call sequences.  This ensures that a
13146     call is always able to reach linker generated stubs.  The default
13147     is to generate long calls only when the distance from the call
13148     site to the beginning of the function or translation unit, as the
13149     case may be, exceeds a predefined limit set by the branch type
13150     being used.  The limits for normal calls are 7,600,000 and 240,000
13151     bytes, respectively for the PA 2.0 and PA 1.X architectures.
13152     Sibcalls are always limited at 240,000 bytes.
13153
13154     Distances are measured from the beginning of functions when using
13155     the `-ffunction-sections' option, or when using the `-mgas' and
13156     `-mno-portable-runtime' options together under HP-UX with the SOM
13157     linker.
13158
13159     It is normally not desirable to use this option as it degrades
13160     performance.  However, it may be useful in large applications,
13161     particularly when partial linking is used to build the application.
13162
13163     The types of long calls used depends on the capabilities of the
13164     assembler and linker, and the type of code being generated.  The
13165     impact on systems that support long absolute calls, and long pic
13166     symbol-difference or pc-relative calls should be relatively small.
13167     However, an indirect call is used on 32-bit ELF systems in pic code
13168     and it is quite long.
13169
13170`-munix=UNIX-STD'
13171     Generate compiler predefines and select a startfile for the
13172     specified UNIX standard.  The choices for UNIX-STD are `93', `95'
13173     and `98'.  `93' is supported on all HP-UX versions.  `95' is
13174     available on HP-UX 10.10 and later.  `98' is available on HP-UX
13175     11.11 and later.  The default values are `93' for HP-UX 10.00,
13176     `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and
13177     later.
13178
13179     `-munix=93' provides the same predefines as GCC 3.3 and 3.4.
13180     `-munix=95' provides additional predefines for `XOPEN_UNIX' and
13181     `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'.
13182     `-munix=98' provides additional predefines for `_XOPEN_UNIX',
13183     `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and
13184     `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'.
13185
13186     It is _important_ to note that this option changes the interfaces
13187     for various library routines.  It also affects the operational
13188     behavior of the C library.  Thus, _extreme_ care is needed in
13189     using this option.
13190
13191     Library code that is intended to operate with more than one UNIX
13192     standard must test, set and restore the variable
13193     __XPG4_EXTENDED_MASK as appropriate.  Most GNU software doesn't
13194     provide this capability.
13195
13196`-nolibdld'
13197     Suppress the generation of link options to search libdld.sl when
13198     the `-static' option is specified on HP-UX 10 and later.
13199
13200`-static'
13201     The HP-UX implementation of setlocale in libc has a dependency on
13202     libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
13203     when the `-static' option is specified, special link options are
13204     needed to resolve this dependency.
13205
13206     On HP-UX 10 and later, the GCC driver adds the necessary options to
13207     link with libdld.sl when the `-static' option is specified.  This
13208     causes the resulting binary to be dynamic.  On the 64-bit port,
13209     the linkers generate dynamic binaries by default in any case.  The
13210     `-nolibdld' option can be used to prevent the GCC driver from
13211     adding these link options.
13212
13213`-threads'
13214     Add support for multithreading with the "dce thread" library under
13215     HP-UX.  This option sets flags for both the preprocessor and
13216     linker.
13217
13218
13219File: gcc.info,  Node: i386 and x86-64 Options,  Next: i386 and x86-64 Windows Options,  Prev: HPPA Options,  Up: Submodel Options
13220
132213.17.16 Intel 386 and AMD x86-64 Options
13222----------------------------------------
13223
13224These `-m' options are defined for the i386 and x86-64 family of
13225computers:
13226
13227`-march=CPU-TYPE'
13228     Generate instructions for the machine type CPU-TYPE.  In contrast
13229     to `-mtune=CPU-TYPE', which merely tunes the generated code for
13230     the specified CPU-TYPE, `-march=CPU-TYPE' allows GCC to generate
13231     code that may not run at all on processors other than the one
13232     indicated.  Specifying `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'.
13233
13234     The choices for CPU-TYPE are:
13235
13236    `native'
13237          This selects the CPU to generate code for at compilation time
13238          by determining the processor type of the compiling machine.
13239          Using `-march=native' enables all instruction subsets
13240          supported by the local machine (hence the result might not
13241          run on different machines).  Using `-mtune=native' produces
13242          code optimized for the local machine under the constraints of
13243          the selected instruction set.
13244
13245    `i386'
13246          Original Intel i386 CPU.
13247
13248    `i486'
13249          Intel i486 CPU.  (No scheduling is implemented for this chip.)
13250
13251    `i586'
13252    `pentium'
13253          Intel Pentium CPU with no MMX support.
13254
13255    `pentium-mmx'
13256          Intel Pentium MMX CPU, based on Pentium core with MMX
13257          instruction set support.
13258
13259    `pentiumpro'
13260          Intel Pentium Pro CPU.
13261
13262    `i686'
13263          When used with `-march', the Pentium Pro instruction set is
13264          used, so the code runs on all i686 family chips.  When used
13265          with `-mtune', it has the same meaning as `generic'.
13266
13267    `pentium2'
13268          Intel Pentium II CPU, based on Pentium Pro core with MMX
13269          instruction set support.
13270
13271    `pentium3'
13272    `pentium3m'
13273          Intel Pentium III CPU, based on Pentium Pro core with MMX and
13274          SSE instruction set support.
13275
13276    `pentium-m'
13277          Intel Pentium M; low-power version of Intel Pentium III CPU
13278          with MMX, SSE and SSE2 instruction set support.  Used by
13279          Centrino notebooks.
13280
13281    `pentium4'
13282    `pentium4m'
13283          Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set
13284          support.
13285
13286    `prescott'
13287          Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2
13288          and SSE3 instruction set support.
13289
13290    `nocona'
13291          Improved version of Intel Pentium 4 CPU with 64-bit
13292          extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
13293
13294    `core2'
13295          Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
13296          and SSSE3 instruction set support.
13297
13298    `corei7'
13299          Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2,
13300          SSE3, SSSE3, SSE4.1 and SSE4.2 instruction set support.
13301
13302    `corei7-avx'
13303          Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2,
13304          SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction
13305          set support.
13306
13307    `core-avx-i'
13308          Intel Core CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
13309          SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND and
13310          F16C instruction set support.
13311
13312    `core-avx2'
13313          Intel Core CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
13314          SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AES, PCLMUL,
13315          FSGSBASE, RDRND, FMA, BMI, BMI2 and F16C instruction set
13316          support.
13317
13318    `atom'
13319          Intel Atom CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
13320          SSE3 and SSSE3 instruction set support.
13321
13322    `k6'
13323          AMD K6 CPU with MMX instruction set support.
13324
13325    `k6-2'
13326    `k6-3'
13327          Improved versions of AMD K6 CPU with MMX and 3DNow!
13328          instruction set support.
13329
13330    `athlon'
13331    `athlon-tbird'
13332          AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
13333          prefetch instructions support.
13334
13335    `athlon-4'
13336    `athlon-xp'
13337    `athlon-mp'
13338          Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
13339          full SSE instruction set support.
13340
13341    `k8'
13342    `opteron'
13343    `athlon64'
13344    `athlon-fx'
13345          Processors based on the AMD K8 core with x86-64 instruction
13346          set support, including the AMD Opteron, Athlon 64, and Athlon
13347          64 FX processors.  (This supersets MMX, SSE, SSE2, 3DNow!,
13348          enhanced 3DNow! and 64-bit instruction set extensions.)
13349
13350    `k8-sse3'
13351    `opteron-sse3'
13352    `athlon64-sse3'
13353          Improved versions of AMD K8 cores with SSE3 instruction set
13354          support.
13355
13356    `amdfam10'
13357    `barcelona'
13358          CPUs based on AMD Family 10h cores with x86-64 instruction
13359          set support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A,
13360          3DNow!, enhanced 3DNow!, ABM and 64-bit instruction set
13361          extensions.)
13362
13363    `bdver1'
13364          CPUs based on AMD Family 15h cores with x86-64 instruction
13365          set support.  (This supersets FMA4, AVX, XOP, LWP, AES,
13366          PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
13367          SSE4.2, ABM and 64-bit instruction set extensions.)
13368
13369    `bdver2'
13370          AMD Family 15h core based CPUs with x86-64 instruction set
13371          support.  (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP,
13372          AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
13373          SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
13374
13375    `bdver3'
13376          AMD Family 15h core based CPUs with x86-64 instruction set
13377          support.  (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP,
13378          AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
13379          SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.
13380
13381    `btver1'
13382          CPUs based on AMD Family 14h cores with x86-64 instruction
13383          set support.  (This supersets MMX, SSE, SSE2, SSE3, SSSE3,
13384          SSE4A, CX16, ABM and 64-bit instruction set extensions.)
13385
13386    `btver2'
13387          CPUs based on AMD Family 16h cores with x86-64 instruction
13388          set support. This includes MOVBE, F16C, BMI, AVX, PCL_MUL,
13389          AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2,
13390          SSE, MMX and 64-bit instruction set extensions.
13391
13392    `winchip-c6'
13393          IDT WinChip C6 CPU, dealt in same way as i486 with additional
13394          MMX instruction set support.
13395
13396    `winchip2'
13397          IDT WinChip 2 CPU, dealt in same way as i486 with additional
13398          MMX and 3DNow!  instruction set support.
13399
13400    `c3'
13401          VIA C3 CPU with MMX and 3DNow! instruction set support.  (No
13402          scheduling is implemented for this chip.)
13403
13404    `c3-2'
13405          VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
13406          support.  (No scheduling is implemented for this chip.)
13407
13408    `geode'
13409          AMD Geode embedded processor with MMX and 3DNow! instruction
13410          set support.
13411
13412`-mtune=CPU-TYPE'
13413     Tune to CPU-TYPE everything applicable about the generated code,
13414     except for the ABI and the set of available instructions.  While
13415     picking a specific CPU-TYPE schedules things appropriately for
13416     that particular chip, the compiler does not generate any code that
13417     cannot run on the default machine type unless you use a
13418     `-march=CPU-TYPE' option.  For example, if GCC is configured for
13419     i686-pc-linux-gnu then `-mtune=pentium4' generates code that is
13420     tuned for Pentium 4 but still runs on i686 machines.
13421
13422     The choices for CPU-TYPE are the same as for `-march'.  In
13423     addition, `-mtune' supports an extra choice for CPU-TYPE:
13424
13425    `generic'
13426          Produce code optimized for the most common IA32/AMD64/EM64T
13427          processors.  If you know the CPU on which your code will run,
13428          then you should use the corresponding `-mtune' or `-march'
13429          option instead of `-mtune=generic'.  But, if you do not know
13430          exactly what CPU users of your application will have, then
13431          you should use this option.
13432
13433          As new processors are deployed in the marketplace, the
13434          behavior of this option will change.  Therefore, if you
13435          upgrade to a newer version of GCC, code generation controlled
13436          by this option will change to reflect the processors that are
13437          most common at the time that version of GCC is released.
13438
13439          There is no `-march=generic' option because `-march'
13440          indicates the instruction set the compiler can use, and there
13441          is no generic instruction set applicable to all processors.
13442          In contrast, `-mtune' indicates the processor (or, in this
13443          case, collection of processors) for which the code is
13444          optimized.
13445
13446`-mcpu=CPU-TYPE'
13447     A deprecated synonym for `-mtune'.
13448
13449`-mfpmath=UNIT'
13450     Generate floating-point arithmetic for selected unit UNIT.  The
13451     choices for UNIT are:
13452
13453    `387'
13454          Use the standard 387 floating-point coprocessor present on
13455          the majority of chips and emulated otherwise.  Code compiled
13456          with this option runs almost everywhere.  The temporary
13457          results are computed in 80-bit precision instead of the
13458          precision specified by the type, resulting in slightly
13459          different results compared to most of other chips.  See
13460          `-ffloat-store' for more detailed description.
13461
13462          This is the default choice for i386 compiler.
13463
13464    `sse'
13465          Use scalar floating-point instructions present in the SSE
13466          instruction set.  This instruction set is supported by
13467          Pentium III and newer chips, and in the AMD line by Athlon-4,
13468          Athlon XP and Athlon MP chips.  The earlier version of the SSE
13469          instruction set supports only single-precision arithmetic,
13470          thus the double and extended-precision arithmetic are still
13471          done using 387.  A later version, present only in Pentium 4
13472          and AMD x86-64 chips, supports double-precision arithmetic
13473          too.
13474
13475          For the i386 compiler, you must use `-march=CPU-TYPE', `-msse'
13476          or `-msse2' switches to enable SSE extensions and make this
13477          option effective.  For the x86-64 compiler, these extensions
13478          are enabled by default.
13479
13480          The resulting code should be considerably faster in the
13481          majority of cases and avoid the numerical instability
13482          problems of 387 code, but may break some existing code that
13483          expects temporaries to be 80 bits.
13484
13485          This is the default choice for the x86-64 compiler.
13486
13487    `sse,387'
13488    `sse+387'
13489    `both'
13490          Attempt to utilize both instruction sets at once.  This
13491          effectively doubles the amount of available registers, and on
13492          chips with separate execution units for 387 and SSE the
13493          execution resources too.  Use this option with care, as it is
13494          still experimental, because the GCC register allocator does
13495          not model separate functional units well, resulting in
13496          unstable performance.
13497
13498`-masm=DIALECT'
13499     Output assembly instructions using selected DIALECT.  Supported
13500     choices are `intel' or `att' (the default).  Darwin does not
13501     support `intel'.
13502
13503`-mieee-fp'
13504`-mno-ieee-fp'
13505     Control whether or not the compiler uses IEEE floating-point
13506     comparisons.  These correctly handle the case where the result of a
13507     comparison is unordered.
13508
13509`-msoft-float'
13510     Generate output containing library calls for floating point.
13511
13512     *Warning:* the requisite libraries are not part of GCC.  Normally
13513     the facilities of the machine's usual C compiler are used, but
13514     this can't be done directly in cross-compilation.  You must make
13515     your own arrangements to provide suitable library functions for
13516     cross-compilation.
13517
13518     On machines where a function returns floating-point results in the
13519     80387 register stack, some floating-point opcodes may be emitted
13520     even if `-msoft-float' is used.
13521
13522`-mno-fp-ret-in-387'
13523     Do not use the FPU registers for return values of functions.
13524
13525     The usual calling convention has functions return values of types
13526     `float' and `double' in an FPU register, even if there is no FPU.
13527     The idea is that the operating system should emulate an FPU.
13528
13529     The option `-mno-fp-ret-in-387' causes such values to be returned
13530     in ordinary CPU registers instead.
13531
13532`-mno-fancy-math-387'
13533     Some 387 emulators do not support the `sin', `cos' and `sqrt'
13534     instructions for the 387.  Specify this option to avoid generating
13535     those instructions.  This option is the default on FreeBSD,
13536     OpenBSD and NetBSD.  This option is overridden when `-march'
13537     indicates that the target CPU always has an FPU and so the
13538     instruction does not need emulation.  These instructions are not
13539     generated unless you also use the `-funsafe-math-optimizations'
13540     switch.
13541
13542`-malign-double'
13543`-mno-align-double'
13544     Control whether GCC aligns `double', `long double', and `long
13545     long' variables on a two-word boundary or a one-word boundary.
13546     Aligning `double' variables on a two-word boundary produces code
13547     that runs somewhat faster on a Pentium at the expense of more
13548     memory.
13549
13550     On x86-64, `-malign-double' is enabled by default.
13551
13552     *Warning:* if you use the `-malign-double' switch, structures
13553     containing the above types are aligned differently than the
13554     published application binary interface specifications for the 386
13555     and are not binary compatible with structures in code compiled
13556     without that switch.
13557
13558`-m96bit-long-double'
13559`-m128bit-long-double'
13560     These switches control the size of `long double' type.  The i386
13561     application binary interface specifies the size to be 96 bits, so
13562     `-m96bit-long-double' is the default in 32-bit mode.
13563
13564     Modern architectures (Pentium and newer) prefer `long double' to
13565     be aligned to an 8- or 16-byte boundary.  In arrays or structures
13566     conforming to the ABI, this is not possible.  So specifying
13567     `-m128bit-long-double' aligns `long double' to a 16-byte boundary
13568     by padding the `long double' with an additional 32-bit zero.
13569
13570     In the x86-64 compiler, `-m128bit-long-double' is the default
13571     choice as its ABI specifies that `long double' is aligned on
13572     16-byte boundary.
13573
13574     Notice that neither of these options enable any extra precision
13575     over the x87 standard of 80 bits for a `long double'.
13576
13577     *Warning:* if you override the default value for your target ABI,
13578     this changes the size of structures and arrays containing `long
13579     double' variables, as well as modifying the function calling
13580     convention for functions taking `long double'.  Hence they are not
13581     binary-compatible with code compiled without that switch.
13582
13583`-mlong-double-64'
13584`-mlong-double-80'
13585     These switches control the size of `long double' type. A size of
13586     64 bits makes the `long double' type equivalent to the `double'
13587     type. This is the default for Bionic C library.
13588
13589     *Warning:* if you override the default value for your target ABI,
13590     this changes the size of structures and arrays containing `long
13591     double' variables, as well as modifying the function calling
13592     convention for functions taking `long double'.  Hence they are not
13593     binary-compatible with code compiled without that switch.
13594
13595`-mlarge-data-threshold=THRESHOLD'
13596     When `-mcmodel=medium' is specified, data objects larger than
13597     THRESHOLD are placed in the large data section.  This value must
13598     be the same across all objects linked into the binary, and
13599     defaults to 65535.
13600
13601`-mrtd'
13602     Use a different function-calling convention, in which functions
13603     that take a fixed number of arguments return with the `ret NUM'
13604     instruction, which pops their arguments while returning.  This
13605     saves one instruction in the caller since there is no need to pop
13606     the arguments there.
13607
13608     You can specify that an individual function is called with this
13609     calling sequence with the function attribute `stdcall'.  You can
13610     also override the `-mrtd' option by using the function attribute
13611     `cdecl'.  *Note Function Attributes::.
13612
13613     *Warning:* this calling convention is incompatible with the one
13614     normally used on Unix, so you cannot use it if you need to call
13615     libraries compiled with the Unix compiler.
13616
13617     Also, you must provide function prototypes for all functions that
13618     take variable numbers of arguments (including `printf'); otherwise
13619     incorrect code is generated for calls to those functions.
13620
13621     In addition, seriously incorrect code results if you call a
13622     function with too many arguments.  (Normally, extra arguments are
13623     harmlessly ignored.)
13624
13625`-mregparm=NUM'
13626     Control how many registers are used to pass integer arguments.  By
13627     default, no registers are used to pass arguments, and at most 3
13628     registers can be used.  You can control this behavior for a
13629     specific function by using the function attribute `regparm'.
13630     *Note Function Attributes::.
13631
13632     *Warning:* if you use this switch, and NUM is nonzero, then you
13633     must build all modules with the same value, including any
13634     libraries.  This includes the system libraries and startup modules.
13635
13636`-msseregparm'
13637     Use SSE register passing conventions for float and double arguments
13638     and return values.  You can control this behavior for a specific
13639     function by using the function attribute `sseregparm'.  *Note
13640     Function Attributes::.
13641
13642     *Warning:* if you use this switch then you must build all modules
13643     with the same value, including any libraries.  This includes the
13644     system libraries and startup modules.
13645
13646`-mvect8-ret-in-mem'
13647     Return 8-byte vectors in memory instead of MMX registers.  This is
13648     the default on Solaris 8 and 9 and VxWorks to match the ABI of the
13649     Sun Studio compilers until version 12.  Later compiler versions
13650     (starting with Studio 12 Update 1) follow the ABI used by other
13651     x86 targets, which is the default on Solaris 10 and later.  _Only_
13652     use this option if you need to remain compatible with existing
13653     code produced by those previous compiler versions or older
13654     versions of GCC.
13655
13656`-mpc32'
13657`-mpc64'
13658`-mpc80'
13659     Set 80387 floating-point precision to 32, 64 or 80 bits.  When
13660     `-mpc32' is specified, the significands of results of
13661     floating-point operations are rounded to 24 bits (single
13662     precision); `-mpc64' rounds the significands of results of
13663     floating-point operations to 53 bits (double precision) and
13664     `-mpc80' rounds the significands of results of floating-point
13665     operations to 64 bits (extended double precision), which is the
13666     default.  When this option is used, floating-point operations in
13667     higher precisions are not available to the programmer without
13668     setting the FPU control word explicitly.
13669
13670     Setting the rounding of floating-point operations to less than the
13671     default 80 bits can speed some programs by 2% or more.  Note that
13672     some mathematical libraries assume that extended-precision
13673     (80-bit) floating-point operations are enabled by default;
13674     routines in such libraries could suffer significant loss of
13675     accuracy, typically through so-called "catastrophic cancellation",
13676     when this option is used to set the precision to less than
13677     extended precision.
13678
13679`-mstackrealign'
13680     Realign the stack at entry.  On the Intel x86, the `-mstackrealign'
13681     option generates an alternate prologue and epilogue that realigns
13682     the run-time stack if necessary.  This supports mixing legacy
13683     codes that keep 4-byte stack alignment with modern codes that keep
13684     16-byte stack alignment for SSE compatibility.  See also the
13685     attribute `force_align_arg_pointer', applicable to individual
13686     functions.
13687
13688`-mpreferred-stack-boundary=NUM'
13689     Attempt to keep the stack boundary aligned to a 2 raised to NUM
13690     byte boundary.  If `-mpreferred-stack-boundary' is not specified,
13691     the default is 4 (16 bytes or 128 bits).
13692
13693     *Warning:* When generating code for the x86-64 architecture with
13694     SSE extensions disabled, `-mpreferred-stack-boundary=3' can be
13695     used to keep the stack boundary aligned to 8 byte boundary.  Since
13696     x86-64 ABI require 16 byte stack alignment, this is ABI
13697     incompatible and intended to be used in controlled environment
13698     where stack space is important limitation.  This option will lead
13699     to wrong code when functions compiled with 16 byte stack alignment
13700     (such as functions from a standard library) are called with
13701     misaligned stack.  In this case, SSE instructions may lead to
13702     misaligned memory access traps.  In addition, variable arguments
13703     will be handled incorrectly for 16 byte aligned objects (including
13704     x87 long double and __int128), leading to wrong results.  You must
13705     build all modules with `-mpreferred-stack-boundary=3', including
13706     any libraries.  This includes the system libraries and startup
13707     modules.
13708
13709`-mincoming-stack-boundary=NUM'
13710     Assume the incoming stack is aligned to a 2 raised to NUM byte
13711     boundary.  If `-mincoming-stack-boundary' is not specified, the
13712     one specified by `-mpreferred-stack-boundary' is used.
13713
13714     On Pentium and Pentium Pro, `double' and `long double' values
13715     should be aligned to an 8-byte boundary (see `-malign-double') or
13716     suffer significant run time performance penalties.  On Pentium
13717     III, the Streaming SIMD Extension (SSE) data type `__m128' may not
13718     work properly if it is not 16-byte aligned.
13719
13720     To ensure proper alignment of this values on the stack, the stack
13721     boundary must be as aligned as that required by any value stored
13722     on the stack.  Further, every function must be generated such that
13723     it keeps the stack aligned.  Thus calling a function compiled with
13724     a higher preferred stack boundary from a function compiled with a
13725     lower preferred stack boundary most likely misaligns the stack.
13726     It is recommended that libraries that use callbacks always use the
13727     default setting.
13728
13729     This extra alignment does consume extra stack space, and generally
13730     increases code size.  Code that is sensitive to stack space usage,
13731     such as embedded systems and operating system kernels, may want to
13732     reduce the preferred alignment to `-mpreferred-stack-boundary=2'.
13733
13734`-mmmx'
13735`-mno-mmx'
13736`-msse'
13737`-mno-sse'
13738`-msse2'
13739`-mno-sse2'
13740`-msse3'
13741`-mno-sse3'
13742`-mssse3'
13743`-mno-ssse3'
13744`-msse4.1'
13745`-mno-sse4.1'
13746`-msse4.2'
13747`-mno-sse4.2'
13748`-msse4'
13749`-mno-sse4'
13750`-mavx'
13751`-mno-avx'
13752`-mavx2'
13753`-mno-avx2'
13754`-maes'
13755`-mno-aes'
13756`-mpclmul'
13757`-mno-pclmul'
13758`-mfsgsbase'
13759`-mno-fsgsbase'
13760`-mrdrnd'
13761`-mno-rdrnd'
13762`-mf16c'
13763`-mno-f16c'
13764`-mfma'
13765`-mno-fma'
13766`-msse4a'
13767`-mno-sse4a'
13768`-mfma4'
13769`-mno-fma4'
13770`-mxop'
13771`-mno-xop'
13772`-mlwp'
13773`-mno-lwp'
13774`-m3dnow'
13775`-mno-3dnow'
13776`-mpopcnt'
13777`-mno-popcnt'
13778`-mabm'
13779`-mno-abm'
13780`-mbmi'
13781`-mbmi2'
13782`-mno-bmi'
13783`-mno-bmi2'
13784`-mlzcnt'
13785`-mno-lzcnt'
13786`-mrtm'
13787`-mtbm'
13788`-mno-tbm'
13789     These switches enable or disable the use of instructions in the
13790     MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL,
13791     FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2,
13792     LZCNT, RTM or 3DNow!  extended instruction sets.  These extensions
13793     are also available as built-in functions: see *note X86 Built-in
13794     Functions::, for details of the functions enabled and disabled by
13795     these switches.
13796
13797     To generate SSE/SSE2 instructions automatically from floating-point
13798     code (as opposed to 387 instructions), see `-mfpmath=sse'.
13799
13800     GCC depresses SSEx instructions when `-mavx' is used. Instead, it
13801     generates new AVX instructions or AVX equivalence for all SSEx
13802     instructions when needed.
13803
13804     These options enable GCC to use these extended instructions in
13805     generated code, even without `-mfpmath=sse'.  Applications that
13806     perform run-time CPU detection must compile separate files for each
13807     supported architecture, using the appropriate flags.  In
13808     particular, the file containing the CPU detection code should be
13809     compiled without these options.
13810
13811`-mcld'
13812     This option instructs GCC to emit a `cld' instruction in the
13813     prologue of functions that use string instructions.  String
13814     instructions depend on the DF flag to select between autoincrement
13815     or autodecrement mode.  While the ABI specifies the DF flag to be
13816     cleared on function entry, some operating systems violate this
13817     specification by not clearing the DF flag in their exception
13818     dispatchers.  The exception handler can be invoked with the DF flag
13819     set, which leads to wrong direction mode when string instructions
13820     are used.  This option can be enabled by default on 32-bit x86
13821     targets by configuring GCC with the `--enable-cld' configure
13822     option.  Generation of `cld' instructions can be suppressed with
13823     the `-mno-cld' compiler option in this case.
13824
13825`-mvzeroupper'
13826     This option instructs GCC to emit a `vzeroupper' instruction
13827     before a transfer of control flow out of the function to minimize
13828     the AVX to SSE transition penalty as well as remove unnecessary
13829     `zeroupper' intrinsics.
13830
13831`-mprefer-avx128'
13832     This option instructs GCC to use 128-bit AVX instructions instead
13833     of 256-bit AVX instructions in the auto-vectorizer.
13834
13835`-mcx16'
13836     This option enables GCC to generate `CMPXCHG16B' instructions.
13837     `CMPXCHG16B' allows for atomic operations on 128-bit double
13838     quadword (or oword) data types.  This is useful for
13839     high-resolution counters that can be updated by multiple
13840     processors (or cores).  This instruction is generated as part of
13841     atomic built-in functions: see *note __sync Builtins:: or *note
13842     __atomic Builtins:: for details.
13843
13844`-msahf'
13845     This option enables generation of `SAHF' instructions in 64-bit
13846     code.  Early Intel Pentium 4 CPUs with Intel 64 support, prior to
13847     the introduction of Pentium 4 G1 step in December 2005, lacked the
13848     `LAHF' and `SAHF' instructions which were supported by AMD64.
13849     These are load and store instructions, respectively, for certain
13850     status flags.  In 64-bit mode, the `SAHF' instruction is used to
13851     optimize `fmod', `drem', and `remainder' built-in functions; see
13852     *note Other Builtins:: for details.
13853
13854`-mmovbe'
13855     This option enables use of the `movbe' instruction to implement
13856     `__builtin_bswap32' and `__builtin_bswap64'.
13857
13858`-mcrc32'
13859     This option enables built-in functions `__builtin_ia32_crc32qi',
13860     `__builtin_ia32_crc32hi', `__builtin_ia32_crc32si' and
13861     `__builtin_ia32_crc32di' to generate the `crc32' machine
13862     instruction.
13863
13864`-mrecip'
13865     This option enables use of `RCPSS' and `RSQRTSS' instructions (and
13866     their vectorized variants `RCPPS' and `RSQRTPS') with an
13867     additional Newton-Raphson step to increase precision instead of
13868     `DIVSS' and `SQRTSS' (and their vectorized variants) for
13869     single-precision floating-point arguments.  These instructions are
13870     generated only when `-funsafe-math-optimizations' is enabled
13871     together with `-finite-math-only' and `-fno-trapping-math'.  Note
13872     that while the throughput of the sequence is higher than the
13873     throughput of the non-reciprocal instruction, the precision of the
13874     sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0
13875     equals 0.99999994).
13876
13877     Note that GCC implements `1.0f/sqrtf(X)' in terms of `RSQRTSS' (or
13878     `RSQRTPS') already with `-ffast-math' (or the above option
13879     combination), and doesn't need `-mrecip'.
13880
13881     Also note that GCC emits the above sequence with additional
13882     Newton-Raphson step for vectorized single-float division and
13883     vectorized `sqrtf(X)' already with `-ffast-math' (or the above
13884     option combination), and doesn't need `-mrecip'.
13885
13886`-mrecip=OPT'
13887     This option controls which reciprocal estimate instructions may be
13888     used.  OPT is a comma-separated list of options, which may be
13889     preceded by a `!' to invert the option:
13890
13891    `all'
13892          Enable all estimate instructions.
13893
13894    `default'
13895          Enable the default instructions, equivalent to `-mrecip'.
13896
13897    `none'
13898          Disable all estimate instructions, equivalent to `-mno-recip'.
13899
13900    `div'
13901          Enable the approximation for scalar division.
13902
13903    `vec-div'
13904          Enable the approximation for vectorized division.
13905
13906    `sqrt'
13907          Enable the approximation for scalar square root.
13908
13909    `vec-sqrt'
13910          Enable the approximation for vectorized square root.
13911
13912     So, for example, `-mrecip=all,!sqrt' enables all of the reciprocal
13913     approximations, except for square root.
13914
13915`-mveclibabi=TYPE'
13916     Specifies the ABI type to use for vectorizing intrinsics using an
13917     external library.  Supported values for TYPE are `svml' for the
13918     Intel short vector math library and `acml' for the AMD math core
13919     library.  To use this option, both `-ftree-vectorize' and
13920     `-funsafe-math-optimizations' have to be enabled, and an SVML or
13921     ACML ABI-compatible library must be specified at link time.
13922
13923     GCC currently emits calls to `vmldExp2', `vmldLn2', `vmldLog102',
13924     `vmldLog102', `vmldPow2', `vmldTanh2', `vmldTan2', `vmldAtan2',
13925     `vmldAtanh2', `vmldCbrt2', `vmldSinh2', `vmldSin2', `vmldAsinh2',
13926     `vmldAsin2', `vmldCosh2', `vmldCos2', `vmldAcosh2', `vmldAcos2',
13927     `vmlsExp4', `vmlsLn4', `vmlsLog104', `vmlsLog104', `vmlsPow4',
13928     `vmlsTanh4', `vmlsTan4', `vmlsAtan4', `vmlsAtanh4', `vmlsCbrt4',
13929     `vmlsSinh4', `vmlsSin4', `vmlsAsinh4', `vmlsAsin4', `vmlsCosh4',
13930     `vmlsCos4', `vmlsAcosh4' and `vmlsAcos4' for corresponding
13931     function type when `-mveclibabi=svml' is used, and `__vrd2_sin',
13932     `__vrd2_cos', `__vrd2_exp', `__vrd2_log', `__vrd2_log2',
13933     `__vrd2_log10', `__vrs4_sinf', `__vrs4_cosf', `__vrs4_expf',
13934     `__vrs4_logf', `__vrs4_log2f', `__vrs4_log10f' and `__vrs4_powf'
13935     for the corresponding function type when `-mveclibabi=acml' is
13936     used.
13937
13938`-mabi=NAME'
13939     Generate code for the specified calling convention.  Permissible
13940     values are `sysv' for the ABI used on GNU/Linux and other systems,
13941     and `ms' for the Microsoft ABI.  The default is to use the
13942     Microsoft ABI when targeting Microsoft Windows and the SysV ABI on
13943     all other systems.  You can control this behavior for a specific
13944     function by using the function attribute `ms_abi'/`sysv_abi'.
13945     *Note Function Attributes::.
13946
13947`-mtls-dialect=TYPE'
13948     Generate code to access thread-local storage using the `gnu' or
13949     `gnu2' conventions.  `gnu' is the conservative default; `gnu2' is
13950     more efficient, but it may add compile- and run-time requirements
13951     that cannot be satisfied on all systems.
13952
13953`-mpush-args'
13954`-mno-push-args'
13955     Use PUSH operations to store outgoing parameters.  This method is
13956     shorter and usually equally fast as method using SUB/MOV
13957     operations and is enabled by default.  In some cases disabling it
13958     may improve performance because of improved scheduling and reduced
13959     dependencies.
13960
13961`-maccumulate-outgoing-args'
13962     If enabled, the maximum amount of space required for outgoing
13963     arguments is computed in the function prologue.  This is faster on
13964     most modern CPUs because of reduced dependencies, improved
13965     scheduling and reduced stack usage when the preferred stack
13966     boundary is not equal to 2.  The drawback is a notable increase in
13967     code size.  This switch implies `-mno-push-args'.
13968
13969`-mthreads'
13970     Support thread-safe exception handling on MinGW.  Programs that
13971     rely on thread-safe exception handling must compile and link all
13972     code with the `-mthreads' option.  When compiling, `-mthreads'
13973     defines `-D_MT'; when linking, it links in a special thread helper
13974     library `-lmingwthrd' which cleans up per-thread
13975     exception-handling data.
13976
13977`-mno-align-stringops'
13978     Do not align the destination of inlined string operations.  This
13979     switch reduces code size and improves performance in case the
13980     destination is already aligned, but GCC doesn't know about it.
13981
13982`-minline-all-stringops'
13983     By default GCC inlines string operations only when the destination
13984     is known to be aligned to least a 4-byte boundary.  This enables
13985     more inlining and increases code size, but may improve performance
13986     of code that depends on fast `memcpy', `strlen', and `memset' for
13987     short lengths.
13988
13989`-minline-stringops-dynamically'
13990     For string operations of unknown size, use run-time checks with
13991     inline code for small blocks and a library call for large blocks.
13992
13993`-mstringop-strategy=ALG'
13994     Override the internal decision heuristic for the particular
13995     algorithm to use for inlining string operations.  The allowed
13996     values for ALG are:
13997
13998    `rep_byte'
13999    `rep_4byte'
14000    `rep_8byte'
14001          Expand using i386 `rep' prefix of the specified size.
14002
14003    `byte_loop'
14004    `loop'
14005    `unrolled_loop'
14006          Expand into an inline loop.
14007
14008    `libcall'
14009          Always use a library call.
14010
14011`-momit-leaf-frame-pointer'
14012     Don't keep the frame pointer in a register for leaf functions.
14013     This avoids the instructions to save, set up, and restore frame
14014     pointers and makes an extra register available in leaf functions.
14015     The option `-fomit-leaf-frame-pointer' removes the frame pointer
14016     for leaf functions, which might make debugging harder.
14017
14018`-mtls-direct-seg-refs'
14019`-mno-tls-direct-seg-refs'
14020     Controls whether TLS variables may be accessed with offsets from
14021     the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or
14022     whether the thread base pointer must be added.  Whether or not this
14023     is valid depends on the operating system, and whether it maps the
14024     segment to cover the entire TLS area.
14025
14026     For systems that use the GNU C Library, the default is on.
14027
14028`-msse2avx'
14029`-mno-sse2avx'
14030     Specify that the assembler should encode SSE instructions with VEX
14031     prefix.  The option `-mavx' turns this on by default.
14032
14033`-mfentry'
14034`-mno-fentry'
14035     If profiling is active (`-pg'), put the profiling counter call
14036     before the prologue.  Note: On x86 architectures the attribute
14037     `ms_hook_prologue' isn't possible at the moment for `-mfentry' and
14038     `-pg'.
14039
14040`-m8bit-idiv'
14041`-mno-8bit-idiv'
14042     On some processors, like Intel Atom, 8-bit unsigned integer divide
14043     is much faster than 32-bit/64-bit integer divide.  This option
14044     generates a run-time check.  If both dividend and divisor are
14045     within range of 0 to 255, 8-bit unsigned integer divide is used
14046     instead of 32-bit/64-bit integer divide.
14047
14048`-mavx256-split-unaligned-load'
14049`-mavx256-split-unaligned-store'
14050     Split 32-byte AVX unaligned load and store.
14051
14052
14053 These `-m' switches are supported in addition to the above on x86-64
14054processors in 64-bit environments.
14055
14056`-m32'
14057`-m64'
14058`-mx32'
14059     Generate code for a 32-bit or 64-bit environment.  The `-m32'
14060     option sets `int', `long', and pointer types to 32 bits, and
14061     generates code that runs on any i386 system.
14062
14063     The `-m64' option sets `int' to 32 bits and `long' and pointer
14064     types to 64 bits, and generates code for the x86-64 architecture.
14065     For Darwin only the `-m64' option also turns off the `-fno-pic'
14066     and `-mdynamic-no-pic' options.
14067
14068     The `-mx32' option sets `int', `long', and pointer types to 32
14069     bits, and generates code for the x86-64 architecture.
14070
14071`-mno-red-zone'
14072     Do not use a so-called "red zone" for x86-64 code.  The red zone
14073     is mandated by the x86-64 ABI; it is a 128-byte area beyond the
14074     location of the stack pointer that is not modified by signal or
14075     interrupt handlers and therefore can be used for temporary data
14076     without adjusting the stack pointer.  The flag `-mno-red-zone'
14077     disables this red zone.
14078
14079`-mcmodel=small'
14080     Generate code for the small code model: the program and its
14081     symbols must be linked in the lower 2 GB of the address space.
14082     Pointers are 64 bits.  Programs can be statically or dynamically
14083     linked.  This is the default code model.
14084
14085`-mcmodel=kernel'
14086     Generate code for the kernel code model.  The kernel runs in the
14087     negative 2 GB of the address space.  This model has to be used for
14088     Linux kernel code.
14089
14090`-mcmodel=medium'
14091     Generate code for the medium model: the program is linked in the
14092     lower 2 GB of the address space.  Small symbols are also placed
14093     there.  Symbols with sizes larger than `-mlarge-data-threshold'
14094     are put into large data or BSS sections and can be located above
14095     2GB.  Programs can be statically or dynamically linked.
14096
14097`-mcmodel=large'
14098     Generate code for the large model.  This model makes no assumptions
14099     about addresses and sizes of sections.
14100
14101`-maddress-mode=long'
14102     Generate code for long address mode.  This is only supported for
14103     64-bit and x32 environments.  It is the default address mode for
14104     64-bit environments.
14105
14106`-maddress-mode=short'
14107     Generate code for short address mode.  This is only supported for
14108     32-bit and x32 environments.  It is the default address mode for
14109     32-bit and x32 environments.
14110
14111
14112File: gcc.info,  Node: i386 and x86-64 Windows Options,  Next: IA-64 Options,  Prev: i386 and x86-64 Options,  Up: Submodel Options
14113
141143.17.17 i386 and x86-64 Windows Options
14115---------------------------------------
14116
14117These additional options are available for Microsoft Windows targets:
14118
14119`-mconsole'
14120     This option specifies that a console application is to be
14121     generated, by instructing the linker to set the PE header
14122     subsystem type required for console applications.  This option is
14123     available for Cygwin and MinGW targets and is enabled by default
14124     on those targets.
14125
14126`-mdll'
14127     This option is available for Cygwin and MinGW targets.  It
14128     specifies that a DLL--a dynamic link library--is to be generated,
14129     enabling the selection of the required runtime startup object and
14130     entry point.
14131
14132`-mnop-fun-dllimport'
14133     This option is available for Cygwin and MinGW targets.  It
14134     specifies that the `dllimport' attribute should be ignored.
14135
14136`-mthread'
14137     This option is available for MinGW targets. It specifies that
14138     MinGW-specific thread support is to be used.
14139
14140`-municode'
14141     This option is available for MinGW-w64 targets.  It causes the
14142     `UNICODE' preprocessor macro to be predefined, and chooses
14143     Unicode-capable runtime startup code.
14144
14145`-mwin32'
14146     This option is available for Cygwin and MinGW targets.  It
14147     specifies that the typical Microsoft Windows predefined macros are
14148     to be set in the pre-processor, but does not influence the choice
14149     of runtime library/startup code.
14150
14151`-mwindows'
14152     This option is available for Cygwin and MinGW targets.  It
14153     specifies that a GUI application is to be generated by instructing
14154     the linker to set the PE header subsystem type appropriately.
14155
14156`-fno-set-stack-executable'
14157     This option is available for MinGW targets. It specifies that the
14158     executable flag for the stack used by nested functions isn't set.
14159     This is necessary for binaries running in kernel mode of Microsoft
14160     Windows, as there the User32 API, which is used to set executable
14161     privileges, isn't available.
14162
14163`-fwritable-relocated-rdata'
14164     This option is available for MinGW and Cygwin targets.  It
14165     specifies that relocated-data in read-only section is put into
14166     .data section.  This is a necessary for older runtimes not
14167     supporting modification of .rdata sections for pseudo-relocation.
14168
14169`-mpe-aligned-commons'
14170     This option is available for Cygwin and MinGW targets.  It
14171     specifies that the GNU extension to the PE file format that
14172     permits the correct alignment of COMMON variables should be used
14173     when generating code.  It is enabled by default if GCC detects
14174     that the target assembler found during configuration supports the
14175     feature.
14176
14177 See also under *note i386 and x86-64 Options:: for standard options.
14178
14179
14180File: gcc.info,  Node: IA-64 Options,  Next: LM32 Options,  Prev: i386 and x86-64 Windows Options,  Up: Submodel Options
14181
141823.17.18 IA-64 Options
14183---------------------
14184
14185These are the `-m' options defined for the Intel IA-64 architecture.
14186
14187`-mbig-endian'
14188     Generate code for a big-endian target.  This is the default for
14189     HP-UX.
14190
14191`-mlittle-endian'
14192     Generate code for a little-endian target.  This is the default for
14193     AIX5 and GNU/Linux.
14194
14195`-mgnu-as'
14196`-mno-gnu-as'
14197     Generate (or don't) code for the GNU assembler.  This is the
14198     default.
14199
14200`-mgnu-ld'
14201`-mno-gnu-ld'
14202     Generate (or don't) code for the GNU linker.  This is the default.
14203
14204`-mno-pic'
14205     Generate code that does not use a global pointer register.  The
14206     result is not position independent code, and violates the IA-64
14207     ABI.
14208
14209`-mvolatile-asm-stop'
14210`-mno-volatile-asm-stop'
14211     Generate (or don't) a stop bit immediately before and after
14212     volatile asm statements.
14213
14214`-mregister-names'
14215`-mno-register-names'
14216     Generate (or don't) `in', `loc', and `out' register names for the
14217     stacked registers.  This may make assembler output more readable.
14218
14219`-mno-sdata'
14220`-msdata'
14221     Disable (or enable) optimizations that use the small data section.
14222     This may be useful for working around optimizer bugs.
14223
14224`-mconstant-gp'
14225     Generate code that uses a single constant global pointer value.
14226     This is useful when compiling kernel code.
14227
14228`-mauto-pic'
14229     Generate code that is self-relocatable.  This implies
14230     `-mconstant-gp'.  This is useful when compiling firmware code.
14231
14232`-minline-float-divide-min-latency'
14233     Generate code for inline divides of floating-point values using
14234     the minimum latency algorithm.
14235
14236`-minline-float-divide-max-throughput'
14237     Generate code for inline divides of floating-point values using
14238     the maximum throughput algorithm.
14239
14240`-mno-inline-float-divide'
14241     Do not generate inline code for divides of floating-point values.
14242
14243`-minline-int-divide-min-latency'
14244     Generate code for inline divides of integer values using the
14245     minimum latency algorithm.
14246
14247`-minline-int-divide-max-throughput'
14248     Generate code for inline divides of integer values using the
14249     maximum throughput algorithm.
14250
14251`-mno-inline-int-divide'
14252     Do not generate inline code for divides of integer values.
14253
14254`-minline-sqrt-min-latency'
14255     Generate code for inline square roots using the minimum latency
14256     algorithm.
14257
14258`-minline-sqrt-max-throughput'
14259     Generate code for inline square roots using the maximum throughput
14260     algorithm.
14261
14262`-mno-inline-sqrt'
14263     Do not generate inline code for `sqrt'.
14264
14265`-mfused-madd'
14266`-mno-fused-madd'
14267     Do (don't) generate code that uses the fused multiply/add or
14268     multiply/subtract instructions.  The default is to use these
14269     instructions.
14270
14271`-mno-dwarf2-asm'
14272`-mdwarf2-asm'
14273     Don't (or do) generate assembler code for the DWARF 2 line number
14274     debugging info.  This may be useful when not using the GNU
14275     assembler.
14276
14277`-mearly-stop-bits'
14278`-mno-early-stop-bits'
14279     Allow stop bits to be placed earlier than immediately preceding the
14280     instruction that triggered the stop bit.  This can improve
14281     instruction scheduling, but does not always do so.
14282
14283`-mfixed-range=REGISTER-RANGE'
14284     Generate code treating the given register range as fixed registers.
14285     A fixed register is one that the register allocator cannot use.
14286     This is useful when compiling kernel code.  A register range is
14287     specified as two registers separated by a dash.  Multiple register
14288     ranges can be specified separated by a comma.
14289
14290`-mtls-size=TLS-SIZE'
14291     Specify bit size of immediate TLS offsets.  Valid values are 14,
14292     22, and 64.
14293
14294`-mtune=CPU-TYPE'
14295     Tune the instruction scheduling for a particular CPU, Valid values
14296     are `itanium', `itanium1', `merced', `itanium2', and `mckinley'.
14297
14298`-milp32'
14299`-mlp64'
14300     Generate code for a 32-bit or 64-bit environment.  The 32-bit
14301     environment sets int, long and pointer to 32 bits.  The 64-bit
14302     environment sets int to 32 bits and long and pointer to 64 bits.
14303     These are HP-UX specific flags.
14304
14305`-mno-sched-br-data-spec'
14306`-msched-br-data-spec'
14307     (Dis/En)able data speculative scheduling before reload.  This
14308     results in generation of `ld.a' instructions and the corresponding
14309     check instructions (`ld.c' / `chk.a').  The default is 'disable'.
14310
14311`-msched-ar-data-spec'
14312`-mno-sched-ar-data-spec'
14313     (En/Dis)able data speculative scheduling after reload.  This
14314     results in generation of `ld.a' instructions and the corresponding
14315     check instructions (`ld.c' / `chk.a').  The default is 'enable'.
14316
14317`-mno-sched-control-spec'
14318`-msched-control-spec'
14319     (Dis/En)able control speculative scheduling.  This feature is
14320     available only during region scheduling (i.e. before reload).
14321     This results in generation of the `ld.s' instructions and the
14322     corresponding check instructions `chk.s'.  The default is
14323     'disable'.
14324
14325`-msched-br-in-data-spec'
14326`-mno-sched-br-in-data-spec'
14327     (En/Dis)able speculative scheduling of the instructions that are
14328     dependent on the data speculative loads before reload.  This is
14329     effective only with `-msched-br-data-spec' enabled.  The default
14330     is 'enable'.
14331
14332`-msched-ar-in-data-spec'
14333`-mno-sched-ar-in-data-spec'
14334     (En/Dis)able speculative scheduling of the instructions that are
14335     dependent on the data speculative loads after reload.  This is
14336     effective only with `-msched-ar-data-spec' enabled.  The default
14337     is 'enable'.
14338
14339`-msched-in-control-spec'
14340`-mno-sched-in-control-spec'
14341     (En/Dis)able speculative scheduling of the instructions that are
14342     dependent on the control speculative loads.  This is effective
14343     only with `-msched-control-spec' enabled.  The default is 'enable'.
14344
14345`-mno-sched-prefer-non-data-spec-insns'
14346`-msched-prefer-non-data-spec-insns'
14347     If enabled, data-speculative instructions are chosen for schedule
14348     only if there are no other choices at the moment.  This makes the
14349     use of the data speculation much more conservative.  The default
14350     is 'disable'.
14351
14352`-mno-sched-prefer-non-control-spec-insns'
14353`-msched-prefer-non-control-spec-insns'
14354     If enabled, control-speculative instructions are chosen for
14355     schedule only if there are no other choices at the moment.  This
14356     makes the use of the control speculation much more conservative.
14357     The default is 'disable'.
14358
14359`-mno-sched-count-spec-in-critical-path'
14360`-msched-count-spec-in-critical-path'
14361     If enabled, speculative dependencies are considered during
14362     computation of the instructions priorities.  This makes the use of
14363     the speculation a bit more conservative.  The default is 'disable'.
14364
14365`-msched-spec-ldc'
14366     Use a simple data speculation check.  This option is on by default.
14367
14368`-msched-control-spec-ldc'
14369     Use a simple check for control speculation.  This option is on by
14370     default.
14371
14372`-msched-stop-bits-after-every-cycle'
14373     Place a stop bit after every cycle when scheduling.  This option
14374     is on by default.
14375
14376`-msched-fp-mem-deps-zero-cost'
14377     Assume that floating-point stores and loads are not likely to
14378     cause a conflict when placed into the same instruction group.
14379     This option is disabled by default.
14380
14381`-msel-sched-dont-check-control-spec'
14382     Generate checks for control speculation in selective scheduling.
14383     This flag is disabled by default.
14384
14385`-msched-max-memory-insns=MAX-INSNS'
14386     Limit on the number of memory insns per instruction group, giving
14387     lower priority to subsequent memory insns attempting to schedule
14388     in the same instruction group. Frequently useful to prevent cache
14389     bank conflicts.  The default value is 1.
14390
14391`-msched-max-memory-insns-hard-limit'
14392     Makes the limit specified by `msched-max-memory-insns' a hard
14393     limit, disallowing more than that number in an instruction group.
14394     Otherwise, the limit is "soft", meaning that non-memory operations
14395     are preferred when the limit is reached, but memory operations may
14396     still be scheduled.
14397
14398
14399
14400File: gcc.info,  Node: LM32 Options,  Next: M32C Options,  Prev: IA-64 Options,  Up: Submodel Options
14401
144023.17.19 LM32 Options
14403--------------------
14404
14405These `-m' options are defined for the LatticeMico32 architecture:
14406
14407`-mbarrel-shift-enabled'
14408     Enable barrel-shift instructions.
14409
14410`-mdivide-enabled'
14411     Enable divide and modulus instructions.
14412
14413`-mmultiply-enabled'
14414     Enable multiply instructions.
14415
14416`-msign-extend-enabled'
14417     Enable sign extend instructions.
14418
14419`-muser-enabled'
14420     Enable user-defined instructions.
14421
14422
14423
14424File: gcc.info,  Node: M32C Options,  Next: M32R/D Options,  Prev: LM32 Options,  Up: Submodel Options
14425
144263.17.20 M32C Options
14427--------------------
14428
14429`-mcpu=NAME'
14430     Select the CPU for which code is generated.  NAME may be one of
14431     `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60)
14432     series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80
14433     series.
14434
14435`-msim'
14436     Specifies that the program will be run on the simulator.  This
14437     causes an alternate runtime library to be linked in which
14438     supports, for example, file I/O.  You must not use this option
14439     when generating programs that will run on real hardware; you must
14440     provide your own runtime library for whatever I/O functions are
14441     needed.
14442
14443`-memregs=NUMBER'
14444     Specifies the number of memory-based pseudo-registers GCC uses
14445     during code generation.  These pseudo-registers are used like real
14446     registers, so there is a tradeoff between GCC's ability to fit the
14447     code into available registers, and the performance penalty of using
14448     memory instead of registers.  Note that all modules in a program
14449     must be compiled with the same value for this option.  Because of
14450     that, you must not use this option with GCC's default runtime
14451     libraries.
14452
14453
14454
14455File: gcc.info,  Node: M32R/D Options,  Next: M680x0 Options,  Prev: M32C Options,  Up: Submodel Options
14456
144573.17.21 M32R/D Options
14458----------------------
14459
14460These `-m' options are defined for Renesas M32R/D architectures:
14461
14462`-m32r2'
14463     Generate code for the M32R/2.
14464
14465`-m32rx'
14466     Generate code for the M32R/X.
14467
14468`-m32r'
14469     Generate code for the M32R.  This is the default.
14470
14471`-mmodel=small'
14472     Assume all objects live in the lower 16MB of memory (so that their
14473     addresses can be loaded with the `ld24' instruction), and assume
14474     all subroutines are reachable with the `bl' instruction.  This is
14475     the default.
14476
14477     The addressability of a particular object can be set with the
14478     `model' attribute.
14479
14480`-mmodel=medium'
14481     Assume objects may be anywhere in the 32-bit address space (the
14482     compiler generates `seth/add3' instructions to load their
14483     addresses), and assume all subroutines are reachable with the `bl'
14484     instruction.
14485
14486`-mmodel=large'
14487     Assume objects may be anywhere in the 32-bit address space (the
14488     compiler generates `seth/add3' instructions to load their
14489     addresses), and assume subroutines may not be reachable with the
14490     `bl' instruction (the compiler generates the much slower
14491     `seth/add3/jl' instruction sequence).
14492
14493`-msdata=none'
14494     Disable use of the small data area.  Variables are put into one of
14495     `.data', `.bss', or `.rodata' (unless the `section' attribute has
14496     been specified).  This is the default.
14497
14498     The small data area consists of sections `.sdata' and `.sbss'.
14499     Objects may be explicitly put in the small data area with the
14500     `section' attribute using one of these sections.
14501
14502`-msdata=sdata'
14503     Put small global and static data in the small data area, but do not
14504     generate special code to reference them.
14505
14506`-msdata=use'
14507     Put small global and static data in the small data area, and
14508     generate special instructions to reference them.
14509
14510`-G NUM'
14511     Put global and static objects less than or equal to NUM bytes into
14512     the small data or BSS sections instead of the normal data or BSS
14513     sections.  The default value of NUM is 8.  The `-msdata' option
14514     must be set to one of `sdata' or `use' for this option to have any
14515     effect.
14516
14517     All modules should be compiled with the same `-G NUM' value.
14518     Compiling with different values of NUM may or may not work; if it
14519     doesn't the linker gives an error message--incorrect code is not
14520     generated.
14521
14522`-mdebug'
14523     Makes the M32R-specific code in the compiler display some
14524     statistics that might help in debugging programs.
14525
14526`-malign-loops'
14527     Align all loops to a 32-byte boundary.
14528
14529`-mno-align-loops'
14530     Do not enforce a 32-byte alignment for loops.  This is the default.
14531
14532`-missue-rate=NUMBER'
14533     Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
14534
14535`-mbranch-cost=NUMBER'
14536     NUMBER can only be 1 or 2.  If it is 1 then branches are preferred
14537     over conditional code, if it is 2, then the opposite applies.
14538
14539`-mflush-trap=NUMBER'
14540     Specifies the trap number to use to flush the cache.  The default
14541     is 12.  Valid numbers are between 0 and 15 inclusive.
14542
14543`-mno-flush-trap'
14544     Specifies that the cache cannot be flushed by using a trap.
14545
14546`-mflush-func=NAME'
14547     Specifies the name of the operating system function to call to
14548     flush the cache.  The default is __flush_cache_, but a function
14549     call is only used if a trap is not available.
14550
14551`-mno-flush-func'
14552     Indicates that there is no OS function for flushing the cache.
14553
14554
14555
14556File: gcc.info,  Node: M680x0 Options,  Next: MCore Options,  Prev: M32R/D Options,  Up: Submodel Options
14557
145583.17.22 M680x0 Options
14559----------------------
14560
14561These are the `-m' options defined for M680x0 and ColdFire processors.
14562The default settings depend on which architecture was selected when the
14563compiler was configured; the defaults for the most common choices are
14564given below.
14565
14566`-march=ARCH'
14567     Generate code for a specific M680x0 or ColdFire instruction set
14568     architecture.  Permissible values of ARCH for M680x0 architectures
14569     are: `68000', `68010', `68020', `68030', `68040', `68060' and
14570     `cpu32'.  ColdFire architectures are selected according to
14571     Freescale's ISA classification and the permissible values are:
14572     `isaa', `isaaplus', `isab' and `isac'.
14573
14574     GCC defines a macro `__mcfARCH__' whenever it is generating code
14575     for a ColdFire target.  The ARCH in this macro is one of the
14576     `-march' arguments given above.
14577
14578     When used together, `-march' and `-mtune' select code that runs on
14579     a family of similar processors but that is optimized for a
14580     particular microarchitecture.
14581
14582`-mcpu=CPU'
14583     Generate code for a specific M680x0 or ColdFire processor.  The
14584     M680x0 CPUs are: `68000', `68010', `68020', `68030', `68040',
14585     `68060', `68302', `68332' and `cpu32'.  The ColdFire CPUs are
14586     given by the table below, which also classifies the CPUs into
14587     families:
14588
14589     *Family*      *`-mcpu' arguments*
14590     `51'          `51' `51ac' `51ag' `51cn' `51em' `51je' `51jf' `51jg'
14591                   `51jm' `51mm' `51qe' `51qm'
14592     `5206'        `5202' `5204' `5206'
14593     `5206e'       `5206e'
14594     `5208'        `5207' `5208'
14595     `5211a'       `5210a' `5211a'
14596     `5213'        `5211' `5212' `5213'
14597     `5216'        `5214' `5216'
14598     `52235'       `52230' `52231' `52232' `52233' `52234' `52235'
14599     `5225'        `5224' `5225'
14600     `52259'       `52252' `52254' `52255' `52256' `52258' `52259'
14601     `5235'        `5232' `5233' `5234' `5235' `523x'
14602     `5249'        `5249'
14603     `5250'        `5250'
14604     `5271'        `5270' `5271'
14605     `5272'        `5272'
14606     `5275'        `5274' `5275'
14607     `5282'        `5280' `5281' `5282' `528x'
14608     `53017'       `53011' `53012' `53013' `53014' `53015' `53016'
14609                   `53017'
14610     `5307'        `5307'
14611     `5329'        `5327' `5328' `5329' `532x'
14612     `5373'        `5372' `5373' `537x'
14613     `5407'        `5407'
14614     `5475'        `5470' `5471' `5472' `5473' `5474' `5475' `547x'
14615                   `5480' `5481' `5482' `5483' `5484' `5485'
14616
14617     `-mcpu=CPU' overrides `-march=ARCH' if ARCH is compatible with
14618     CPU.  Other combinations of `-mcpu' and `-march' are rejected.
14619
14620     GCC defines the macro `__mcf_cpu_CPU' when ColdFire target CPU is
14621     selected.  It also defines `__mcf_family_FAMILY', where the value
14622     of FAMILY is given by the table above.
14623
14624`-mtune=TUNE'
14625     Tune the code for a particular microarchitecture within the
14626     constraints set by `-march' and `-mcpu'.  The M680x0
14627     microarchitectures are: `68000', `68010', `68020', `68030',
14628     `68040', `68060' and `cpu32'.  The ColdFire microarchitectures
14629     are: `cfv1', `cfv2', `cfv3', `cfv4' and `cfv4e'.
14630
14631     You can also use `-mtune=68020-40' for code that needs to run
14632     relatively well on 68020, 68030 and 68040 targets.
14633     `-mtune=68020-60' is similar but includes 68060 targets as well.
14634     These two options select the same tuning decisions as `-m68020-40'
14635     and `-m68020-60' respectively.
14636
14637     GCC defines the macros `__mcARCH' and `__mcARCH__' when tuning for
14638     680x0 architecture ARCH.  It also defines `mcARCH' unless either
14639     `-ansi' or a non-GNU `-std' option is used.  If GCC is tuning for
14640     a range of architectures, as selected by `-mtune=68020-40' or
14641     `-mtune=68020-60', it defines the macros for every architecture in
14642     the range.
14643
14644     GCC also defines the macro `__mUARCH__' when tuning for ColdFire
14645     microarchitecture UARCH, where UARCH is one of the arguments given
14646     above.
14647
14648`-m68000'
14649`-mc68000'
14650     Generate output for a 68000.  This is the default when the
14651     compiler is configured for 68000-based systems.  It is equivalent
14652     to `-march=68000'.
14653
14654     Use this option for microcontrollers with a 68000 or EC000 core,
14655     including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
14656
14657`-m68010'
14658     Generate output for a 68010.  This is the default when the
14659     compiler is configured for 68010-based systems.  It is equivalent
14660     to `-march=68010'.
14661
14662`-m68020'
14663`-mc68020'
14664     Generate output for a 68020.  This is the default when the
14665     compiler is configured for 68020-based systems.  It is equivalent
14666     to `-march=68020'.
14667
14668`-m68030'
14669     Generate output for a 68030.  This is the default when the
14670     compiler is configured for 68030-based systems.  It is equivalent
14671     to `-march=68030'.
14672
14673`-m68040'
14674     Generate output for a 68040.  This is the default when the
14675     compiler is configured for 68040-based systems.  It is equivalent
14676     to `-march=68040'.
14677
14678     This option inhibits the use of 68881/68882 instructions that have
14679     to be emulated by software on the 68040.  Use this option if your
14680     68040 does not have code to emulate those instructions.
14681
14682`-m68060'
14683     Generate output for a 68060.  This is the default when the
14684     compiler is configured for 68060-based systems.  It is equivalent
14685     to `-march=68060'.
14686
14687     This option inhibits the use of 68020 and 68881/68882 instructions
14688     that have to be emulated by software on the 68060.  Use this
14689     option if your 68060 does not have code to emulate those
14690     instructions.
14691
14692`-mcpu32'
14693     Generate output for a CPU32.  This is the default when the
14694     compiler is configured for CPU32-based systems.  It is equivalent
14695     to `-march=cpu32'.
14696
14697     Use this option for microcontrollers with a CPU32 or CPU32+ core,
14698     including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
14699     68341, 68349 and 68360.
14700
14701`-m5200'
14702     Generate output for a 520X ColdFire CPU.  This is the default when
14703     the compiler is configured for 520X-based systems.  It is
14704     equivalent to `-mcpu=5206', and is now deprecated in favor of that
14705     option.
14706
14707     Use this option for microcontroller with a 5200 core, including
14708     the MCF5202, MCF5203, MCF5204 and MCF5206.
14709
14710`-m5206e'
14711     Generate output for a 5206e ColdFire CPU.  The option is now
14712     deprecated in favor of the equivalent `-mcpu=5206e'.
14713
14714`-m528x'
14715     Generate output for a member of the ColdFire 528X family.  The
14716     option is now deprecated in favor of the equivalent `-mcpu=528x'.
14717
14718`-m5307'
14719     Generate output for a ColdFire 5307 CPU.  The option is now
14720     deprecated in favor of the equivalent `-mcpu=5307'.
14721
14722`-m5407'
14723     Generate output for a ColdFire 5407 CPU.  The option is now
14724     deprecated in favor of the equivalent `-mcpu=5407'.
14725
14726`-mcfv4e'
14727     Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
14728     This includes use of hardware floating-point instructions.  The
14729     option is equivalent to `-mcpu=547x', and is now deprecated in
14730     favor of that option.
14731
14732`-m68020-40'
14733     Generate output for a 68040, without using any of the new
14734     instructions.  This results in code that can run relatively
14735     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
14736     generated code does use the 68881 instructions that are emulated
14737     on the 68040.
14738
14739     The option is equivalent to `-march=68020' `-mtune=68020-40'.
14740
14741`-m68020-60'
14742     Generate output for a 68060, without using any of the new
14743     instructions.  This results in code that can run relatively
14744     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
14745     generated code does use the 68881 instructions that are emulated
14746     on the 68060.
14747
14748     The option is equivalent to `-march=68020' `-mtune=68020-60'.
14749
14750`-mhard-float'
14751`-m68881'
14752     Generate floating-point instructions.  This is the default for
14753     68020 and above, and for ColdFire devices that have an FPU.  It
14754     defines the macro `__HAVE_68881__' on M680x0 targets and
14755     `__mcffpu__' on ColdFire targets.
14756
14757`-msoft-float'
14758     Do not generate floating-point instructions; use library calls
14759     instead.  This is the default for 68000, 68010, and 68832 targets.
14760     It is also the default for ColdFire devices that have no FPU.
14761
14762`-mdiv'
14763`-mno-div'
14764     Generate (do not generate) ColdFire hardware divide and remainder
14765     instructions.  If `-march' is used without `-mcpu', the default is
14766     "on" for ColdFire architectures and "off" for M680x0
14767     architectures.  Otherwise, the default is taken from the target CPU
14768     (either the default CPU, or the one specified by `-mcpu').  For
14769     example, the default is "off" for `-mcpu=5206' and "on" for
14770     `-mcpu=5206e'.
14771
14772     GCC defines the macro `__mcfhwdiv__' when this option is enabled.
14773
14774`-mshort'
14775     Consider type `int' to be 16 bits wide, like `short int'.
14776     Additionally, parameters passed on the stack are also aligned to a
14777     16-bit boundary even on targets whose API mandates promotion to
14778     32-bit.
14779
14780`-mno-short'
14781     Do not consider type `int' to be 16 bits wide.  This is the
14782     default.
14783
14784`-mnobitfield'
14785`-mno-bitfield'
14786     Do not use the bit-field instructions.  The `-m68000', `-mcpu32'
14787     and `-m5200' options imply `-mnobitfield'.
14788
14789`-mbitfield'
14790     Do use the bit-field instructions.  The `-m68020' option implies
14791     `-mbitfield'.  This is the default if you use a configuration
14792     designed for a 68020.
14793
14794`-mrtd'
14795     Use a different function-calling convention, in which functions
14796     that take a fixed number of arguments return with the `rtd'
14797     instruction, which pops their arguments while returning.  This
14798     saves one instruction in the caller since there is no need to pop
14799     the arguments there.
14800
14801     This calling convention is incompatible with the one normally used
14802     on Unix, so you cannot use it if you need to call libraries
14803     compiled with the Unix compiler.
14804
14805     Also, you must provide function prototypes for all functions that
14806     take variable numbers of arguments (including `printf'); otherwise
14807     incorrect code is generated for calls to those functions.
14808
14809     In addition, seriously incorrect code results if you call a
14810     function with too many arguments.  (Normally, extra arguments are
14811     harmlessly ignored.)
14812
14813     The `rtd' instruction is supported by the 68010, 68020, 68030,
14814     68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
14815
14816`-mno-rtd'
14817     Do not use the calling conventions selected by `-mrtd'.  This is
14818     the default.
14819
14820`-malign-int'
14821`-mno-align-int'
14822     Control whether GCC aligns `int', `long', `long long', `float',
14823     `double', and `long double' variables on a 32-bit boundary
14824     (`-malign-int') or a 16-bit boundary (`-mno-align-int').  Aligning
14825     variables on 32-bit boundaries produces code that runs somewhat
14826     faster on processors with 32-bit busses at the expense of more
14827     memory.
14828
14829     *Warning:* if you use the `-malign-int' switch, GCC aligns
14830     structures containing the above types differently than most
14831     published application binary interface specifications for the m68k.
14832
14833`-mpcrel'
14834     Use the pc-relative addressing mode of the 68000 directly, instead
14835     of using a global offset table.  At present, this option implies
14836     `-fpic', allowing at most a 16-bit offset for pc-relative
14837     addressing.  `-fPIC' is not presently supported with `-mpcrel',
14838     though this could be supported for 68020 and higher processors.
14839
14840`-mno-strict-align'
14841`-mstrict-align'
14842     Do not (do) assume that unaligned memory references are handled by
14843     the system.
14844
14845`-msep-data'
14846     Generate code that allows the data segment to be located in a
14847     different area of memory from the text segment.  This allows for
14848     execute-in-place in an environment without virtual memory
14849     management.  This option implies `-fPIC'.
14850
14851`-mno-sep-data'
14852     Generate code that assumes that the data segment follows the text
14853     segment.  This is the default.
14854
14855`-mid-shared-library'
14856     Generate code that supports shared libraries via the library ID
14857     method.  This allows for execute-in-place and shared libraries in
14858     an environment without virtual memory management.  This option
14859     implies `-fPIC'.
14860
14861`-mno-id-shared-library'
14862     Generate code that doesn't assume ID-based shared libraries are
14863     being used.  This is the default.
14864
14865`-mshared-library-id=n'
14866     Specifies the identification number of the ID-based shared library
14867     being compiled.  Specifying a value of 0 generates more compact
14868     code; specifying other values forces the allocation of that number
14869     to the current library, but is no more space- or time-efficient
14870     than omitting this option.
14871
14872`-mxgot'
14873`-mno-xgot'
14874     When generating position-independent code for ColdFire, generate
14875     code that works if the GOT has more than 8192 entries.  This code
14876     is larger and slower than code generated without this option.  On
14877     M680x0 processors, this option is not needed; `-fPIC' suffices.
14878
14879     GCC normally uses a single instruction to load values from the GOT.
14880     While this is relatively efficient, it only works if the GOT is
14881     smaller than about 64k.  Anything larger causes the linker to
14882     report an error such as:
14883
14884          relocation truncated to fit: R_68K_GOT16O foobar
14885
14886     If this happens, you should recompile your code with `-mxgot'.  It
14887     should then work with very large GOTs.  However, code generated
14888     with `-mxgot' is less efficient, since it takes 4 instructions to
14889     fetch the value of a global symbol.
14890
14891     Note that some linkers, including newer versions of the GNU linker,
14892     can create multiple GOTs and sort GOT entries.  If you have such a
14893     linker, you should only need to use `-mxgot' when compiling a
14894     single object file that accesses more than 8192 GOT entries.  Very
14895     few do.
14896
14897     These options have no effect unless GCC is generating
14898     position-independent code.
14899
14900
14901
14902File: gcc.info,  Node: MCore Options,  Next: MeP Options,  Prev: M680x0 Options,  Up: Submodel Options
14903
149043.17.23 MCore Options
14905---------------------
14906
14907These are the `-m' options defined for the Motorola M*Core processors.
14908
14909`-mhardlit'
14910`-mno-hardlit'
14911     Inline constants into the code stream if it can be done in two
14912     instructions or less.
14913
14914`-mdiv'
14915`-mno-div'
14916     Use the divide instruction.  (Enabled by default).
14917
14918`-mrelax-immediate'
14919`-mno-relax-immediate'
14920     Allow arbitrary-sized immediates in bit operations.
14921
14922`-mwide-bitfields'
14923`-mno-wide-bitfields'
14924     Always treat bit-fields as `int'-sized.
14925
14926`-m4byte-functions'
14927`-mno-4byte-functions'
14928     Force all functions to be aligned to a 4-byte boundary.
14929
14930`-mcallgraph-data'
14931`-mno-callgraph-data'
14932     Emit callgraph information.
14933
14934`-mslow-bytes'
14935`-mno-slow-bytes'
14936     Prefer word access when reading byte quantities.
14937
14938`-mlittle-endian'
14939`-mbig-endian'
14940     Generate code for a little-endian target.
14941
14942`-m210'
14943`-m340'
14944     Generate code for the 210 processor.
14945
14946`-mno-lsim'
14947     Assume that runtime support has been provided and so omit the
14948     simulator library (`libsim.a)' from the linker command line.
14949
14950`-mstack-increment=SIZE'
14951     Set the maximum amount for a single stack increment operation.
14952     Large values can increase the speed of programs that contain
14953     functions that need a large amount of stack space, but they can
14954     also trigger a segmentation fault if the stack is extended too
14955     much.  The default value is 0x1000.
14956
14957
14958
14959File: gcc.info,  Node: MeP Options,  Next: MicroBlaze Options,  Prev: MCore Options,  Up: Submodel Options
14960
149613.17.24 MeP Options
14962-------------------
14963
14964`-mabsdiff'
14965     Enables the `abs' instruction, which is the absolute difference
14966     between two registers.
14967
14968`-mall-opts'
14969     Enables all the optional instructions--average, multiply, divide,
14970     bit operations, leading zero, absolute difference, min/max, clip,
14971     and saturation.
14972
14973`-maverage'
14974     Enables the `ave' instruction, which computes the average of two
14975     registers.
14976
14977`-mbased=N'
14978     Variables of size N bytes or smaller are placed in the `.based'
14979     section by default.  Based variables use the `$tp' register as a
14980     base register, and there is a 128-byte limit to the `.based'
14981     section.
14982
14983`-mbitops'
14984     Enables the bit operation instructions--bit test (`btstm'), set
14985     (`bsetm'), clear (`bclrm'), invert (`bnotm'), and test-and-set
14986     (`tas').
14987
14988`-mc=NAME'
14989     Selects which section constant data is placed in.  NAME may be
14990     `tiny', `near', or `far'.
14991
14992`-mclip'
14993     Enables the `clip' instruction.  Note that `-mclip' is not useful
14994     unless you also provide `-mminmax'.
14995
14996`-mconfig=NAME'
14997     Selects one of the built-in core configurations.  Each MeP chip has
14998     one or more modules in it; each module has a core CPU and a
14999     variety of coprocessors, optional instructions, and peripherals.
15000     The `MeP-Integrator' tool, not part of GCC, provides these
15001     configurations through this option; using this option is the same
15002     as using all the corresponding command-line options.  The default
15003     configuration is `default'.
15004
15005`-mcop'
15006     Enables the coprocessor instructions.  By default, this is a 32-bit
15007     coprocessor.  Note that the coprocessor is normally enabled via the
15008     `-mconfig=' option.
15009
15010`-mcop32'
15011     Enables the 32-bit coprocessor's instructions.
15012
15013`-mcop64'
15014     Enables the 64-bit coprocessor's instructions.
15015
15016`-mivc2'
15017     Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
15018
15019`-mdc'
15020     Causes constant variables to be placed in the `.near' section.
15021
15022`-mdiv'
15023     Enables the `div' and `divu' instructions.
15024
15025`-meb'
15026     Generate big-endian code.
15027
15028`-mel'
15029     Generate little-endian code.
15030
15031`-mio-volatile'
15032     Tells the compiler that any variable marked with the `io'
15033     attribute is to be considered volatile.
15034
15035`-ml'
15036     Causes variables to be assigned to the `.far' section by default.
15037
15038`-mleadz'
15039     Enables the `leadz' (leading zero) instruction.
15040
15041`-mm'
15042     Causes variables to be assigned to the `.near' section by default.
15043
15044`-mminmax'
15045     Enables the `min' and `max' instructions.
15046
15047`-mmult'
15048     Enables the multiplication and multiply-accumulate instructions.
15049
15050`-mno-opts'
15051     Disables all the optional instructions enabled by `-mall-opts'.
15052
15053`-mrepeat'
15054     Enables the `repeat' and `erepeat' instructions, used for
15055     low-overhead looping.
15056
15057`-ms'
15058     Causes all variables to default to the `.tiny' section.  Note that
15059     there is a 65536-byte limit to this section.  Accesses to these
15060     variables use the `%gp' base register.
15061
15062`-msatur'
15063     Enables the saturation instructions.  Note that the compiler does
15064     not currently generate these itself, but this option is included
15065     for compatibility with other tools, like `as'.
15066
15067`-msdram'
15068     Link the SDRAM-based runtime instead of the default ROM-based
15069     runtime.
15070
15071`-msim'
15072     Link the simulator runtime libraries.
15073
15074`-msimnovec'
15075     Link the simulator runtime libraries, excluding built-in support
15076     for reset and exception vectors and tables.
15077
15078`-mtf'
15079     Causes all functions to default to the `.far' section.  Without
15080     this option, functions default to the `.near' section.
15081
15082`-mtiny=N'
15083     Variables that are N bytes or smaller are allocated to the `.tiny'
15084     section.  These variables use the `$gp' base register.  The
15085     default for this option is 4, but note that there's a 65536-byte
15086     limit to the `.tiny' section.
15087
15088
15089
15090File: gcc.info,  Node: MicroBlaze Options,  Next: MIPS Options,  Prev: MeP Options,  Up: Submodel Options
15091
150923.17.25 MicroBlaze Options
15093--------------------------
15094
15095`-msoft-float'
15096     Use software emulation for floating point (default).
15097
15098`-mhard-float'
15099     Use hardware floating-point instructions.
15100
15101`-mmemcpy'
15102     Do not optimize block moves, use `memcpy'.
15103
15104`-mno-clearbss'
15105     This option is deprecated.  Use `-fno-zero-initialized-in-bss'
15106     instead.
15107
15108`-mcpu=CPU-TYPE'
15109     Use features of, and schedule code for, the given CPU.  Supported
15110     values are in the format `vX.YY.Z', where X is a major version, YY
15111     is the minor version, and Z is compatibility code.  Example values
15112     are `v3.00.a', `v4.00.b', `v5.00.a', `v5.00.b', `v5.00.b',
15113     `v6.00.a'.
15114
15115`-mxl-soft-mul'
15116     Use software multiply emulation (default).
15117
15118`-mxl-soft-div'
15119     Use software emulation for divides (default).
15120
15121`-mxl-barrel-shift'
15122     Use the hardware barrel shifter.
15123
15124`-mxl-pattern-compare'
15125     Use pattern compare instructions.
15126
15127`-msmall-divides'
15128     Use table lookup optimization for small signed integer divisions.
15129
15130`-mxl-stack-check'
15131     This option is deprecated.  Use `-fstack-check' instead.
15132
15133`-mxl-gp-opt'
15134     Use GP-relative `.sdata'/`.sbss' sections.
15135
15136`-mxl-multiply-high'
15137     Use multiply high instructions for high part of 32x32 multiply.
15138
15139`-mxl-float-convert'
15140     Use hardware floating-point conversion instructions.
15141
15142`-mxl-float-sqrt'
15143     Use hardware floating-point square root instruction.
15144
15145`-mbig-endian'
15146     Generate code for a big-endian target.
15147
15148`-mlittle-endian'
15149     Generate code for a little-endian target.
15150
15151`-mxl-reorder'
15152     Use reorder instructions (swap and byte reversed load/store).
15153
15154`-mxl-mode-APP-MODEL'
15155     Select application model APP-MODEL.  Valid models are
15156    `executable'
15157          normal executable (default), uses startup code `crt0.o'.
15158
15159    `xmdstub'
15160          for use with Xilinx Microprocessor Debugger (XMD) based
15161          software intrusive debug agent called xmdstub. This uses
15162          startup file `crt1.o' and sets the start address of the
15163          program to 0x800.
15164
15165    `bootstrap'
15166          for applications that are loaded using a bootloader.  This
15167          model uses startup file `crt2.o' which does not contain a
15168          processor reset vector handler. This is suitable for
15169          transferring control on a processor reset to the bootloader
15170          rather than the application.
15171
15172    `novectors'
15173          for applications that do not require any of the MicroBlaze
15174          vectors. This option may be useful for applications running
15175          within a monitoring application. This model uses `crt3.o' as
15176          a startup file.
15177
15178     Option `-xl-mode-APP-MODEL' is a deprecated alias for
15179     `-mxl-mode-APP-MODEL'.
15180
15181
15182
15183File: gcc.info,  Node: MIPS Options,  Next: MMIX Options,  Prev: MicroBlaze Options,  Up: Submodel Options
15184
151853.17.26 MIPS Options
15186--------------------
15187
15188`-EB'
15189     Generate big-endian code.
15190
15191`-EL'
15192     Generate little-endian code.  This is the default for `mips*el-*-*'
15193     configurations.
15194
15195`-march=ARCH'
15196     Generate code that runs on ARCH, which can be the name of a
15197     generic MIPS ISA, or the name of a particular processor.  The ISA
15198     names are: `mips1', `mips2', `mips3', `mips4', `mips32',
15199     `mips32r2', `mips64' and `mips64r2'.  The processor names are:
15200     `4kc', `4km', `4kp', `4ksc', `4kec', `4kem', `4kep', `4ksd',
15201     `5kc', `5kf', `20kc', `24kc', `24kf2_1', `24kf1_1', `24kec',
15202     `24kef2_1', `24kef1_1', `34kc', `34kf2_1', `34kf1_1', `34kn',
15203     `74kc', `74kf2_1', `74kf1_1', `74kf3_2', `1004kc', `1004kf2_1',
15204     `1004kf1_1', `loongson2e', `loongson2f', `loongson3a', `m4k',
15205     `octeon', `octeon+', `octeon2', `orion', `r2000', `r3000',
15206     `r3900', `r4000', `r4400', `r4600', `r4650', `r4700', `r6000',
15207     `r8000', `rm7000', `rm9000', `r10000', `r12000', `r14000',
15208     `r16000', `sb1', `sr71000', `vr4100', `vr4111', `vr4120',
15209     `vr4130', `vr4300', `vr5000', `vr5400', `vr5500', `xlr' and `xlp'.
15210     The special value `from-abi' selects the most compatible
15211     architecture for the selected ABI (that is, `mips1' for 32-bit
15212     ABIs and `mips3' for 64-bit ABIs).
15213
15214     The native Linux/GNU toolchain also supports the value `native',
15215     which selects the best architecture option for the host processor.
15216     `-march=native' has no effect if GCC does not recognize the
15217     processor.
15218
15219     In processor names, a final `000' can be abbreviated as `k' (for
15220     example, `-march=r2k').  Prefixes are optional, and `vr' may be
15221     written `r'.
15222
15223     Names of the form `Nf2_1' refer to processors with FPUs clocked at
15224     half the rate of the core, names of the form `Nf1_1' refer to
15225     processors with FPUs clocked at the same rate as the core, and
15226     names of the form `Nf3_2' refer to processors with FPUs clocked a
15227     ratio of 3:2 with respect to the core.  For compatibility reasons,
15228     `Nf' is accepted as a synonym for `Nf2_1' while `Nx' and `Bfx' are
15229     accepted as synonyms for `Nf1_1'.
15230
15231     GCC defines two macros based on the value of this option.  The
15232     first is `_MIPS_ARCH', which gives the name of target
15233     architecture, as a string.  The second has the form
15234     `_MIPS_ARCH_FOO', where FOO is the capitalized value of
15235     `_MIPS_ARCH'.  For example, `-march=r2000' sets `_MIPS_ARCH' to
15236     `"r2000"' and defines the macro `_MIPS_ARCH_R2000'.
15237
15238     Note that the `_MIPS_ARCH' macro uses the processor names given
15239     above.  In other words, it has the full prefix and does not
15240     abbreviate `000' as `k'.  In the case of `from-abi', the macro
15241     names the resolved architecture (either `"mips1"' or `"mips3"').
15242     It names the default architecture when no `-march' option is given.
15243
15244`-mtune=ARCH'
15245     Optimize for ARCH.  Among other things, this option controls the
15246     way instructions are scheduled, and the perceived cost of
15247     arithmetic operations.  The list of ARCH values is the same as for
15248     `-march'.
15249
15250     When this option is not used, GCC optimizes for the processor
15251     specified by `-march'.  By using `-march' and `-mtune' together,
15252     it is possible to generate code that runs on a family of
15253     processors, but optimize the code for one particular member of
15254     that family.
15255
15256     `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO',
15257     which work in the same way as the `-march' ones described above.
15258
15259`-mips1'
15260     Equivalent to `-march=mips1'.
15261
15262`-mips2'
15263     Equivalent to `-march=mips2'.
15264
15265`-mips3'
15266     Equivalent to `-march=mips3'.
15267
15268`-mips4'
15269     Equivalent to `-march=mips4'.
15270
15271`-mips32'
15272     Equivalent to `-march=mips32'.
15273
15274`-mips32r2'
15275     Equivalent to `-march=mips32r2'.
15276
15277`-mips64'
15278     Equivalent to `-march=mips64'.
15279
15280`-mips64r2'
15281     Equivalent to `-march=mips64r2'.
15282
15283`-mips16'
15284`-mno-mips16'
15285     Generate (do not generate) MIPS16 code.  If GCC is targeting a
15286     MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
15287
15288     MIPS16 code generation can also be controlled on a per-function
15289     basis by means of `mips16' and `nomips16' attributes.  *Note
15290     Function Attributes::, for more information.
15291
15292`-mflip-mips16'
15293     Generate MIPS16 code on alternating functions.  This option is
15294     provided for regression testing of mixed MIPS16/non-MIPS16 code
15295     generation, and is not intended for ordinary use in compiling user
15296     code.
15297
15298`-minterlink-mips16'
15299`-mno-interlink-mips16'
15300     Require (do not require) that non-MIPS16 code be link-compatible
15301     with MIPS16 code.
15302
15303     For example, non-MIPS16 code cannot jump directly to MIPS16 code;
15304     it must either use a call or an indirect jump.
15305     `-minterlink-mips16' therefore disables direct jumps unless GCC
15306     knows that the target of the jump is not MIPS16.
15307
15308`-mabi=32'
15309`-mabi=o64'
15310`-mabi=n32'
15311`-mabi=64'
15312`-mabi=eabi'
15313     Generate code for the given ABI.
15314
15315     Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
15316     generates 64-bit code when you select a 64-bit architecture, but
15317     you can use `-mgp32' to get 32-bit code instead.
15318
15319     For information about the O64 ABI, see
15320     `http://gcc.gnu.org/projects/mipso64-abi.html'.
15321
15322     GCC supports a variant of the o32 ABI in which floating-point
15323     registers are 64 rather than 32 bits wide.  You can select this
15324     combination with `-mabi=32' `-mfp64'.  This ABI relies on the
15325     `mthc1' and `mfhc1' instructions and is therefore only supported
15326     for MIPS32R2 processors.
15327
15328     The register assignments for arguments and return values remain the
15329     same, but each scalar value is passed in a single 64-bit register
15330     rather than a pair of 32-bit registers.  For example, scalar
15331     floating-point values are returned in `$f0' only, not a
15332     `$f0'/`$f1' pair.  The set of call-saved registers also remains
15333     the same, but all 64 bits are saved.
15334
15335`-mabicalls'
15336`-mno-abicalls'
15337     Generate (do not generate) code that is suitable for SVR4-style
15338     dynamic objects.  `-mabicalls' is the default for SVR4-based
15339     systems.
15340
15341`-mshared'
15342`-mno-shared'
15343     Generate (do not generate) code that is fully position-independent,
15344     and that can therefore be linked into shared libraries.  This
15345     option only affects `-mabicalls'.
15346
15347     All `-mabicalls' code has traditionally been position-independent,
15348     regardless of options like `-fPIC' and `-fpic'.  However, as an
15349     extension, the GNU toolchain allows executables to use absolute
15350     accesses for locally-binding symbols.  It can also use shorter GP
15351     initialization sequences and generate direct calls to
15352     locally-defined functions.  This mode is selected by `-mno-shared'.
15353
15354     `-mno-shared' depends on binutils 2.16 or higher and generates
15355     objects that can only be linked by the GNU linker.  However, the
15356     option does not affect the ABI of the final executable; it only
15357     affects the ABI of relocatable objects.  Using `-mno-shared'
15358     generally makes executables both smaller and quicker.
15359
15360     `-mshared' is the default.
15361
15362`-mplt'
15363`-mno-plt'
15364     Assume (do not assume) that the static and dynamic linkers support
15365     PLTs and copy relocations.  This option only affects `-mno-shared
15366     -mabicalls'.  For the n64 ABI, this option has no effect without
15367     `-msym32'.
15368
15369     You can make `-mplt' the default by configuring GCC with
15370     `--with-mips-plt'.  The default is `-mno-plt' otherwise.
15371
15372`-mxgot'
15373`-mno-xgot'
15374     Lift (do not lift) the usual restrictions on the size of the global
15375     offset table.
15376
15377     GCC normally uses a single instruction to load values from the GOT.
15378     While this is relatively efficient, it only works if the GOT is
15379     smaller than about 64k.  Anything larger causes the linker to
15380     report an error such as:
15381
15382          relocation truncated to fit: R_MIPS_GOT16 foobar
15383
15384     If this happens, you should recompile your code with `-mxgot'.
15385     This works with very large GOTs, although the code is also less
15386     efficient, since it takes three instructions to fetch the value of
15387     a global symbol.
15388
15389     Note that some linkers can create multiple GOTs.  If you have such
15390     a linker, you should only need to use `-mxgot' when a single object
15391     file accesses more than 64k's worth of GOT entries.  Very few do.
15392
15393     These options have no effect unless GCC is generating position
15394     independent code.
15395
15396`-mgp32'
15397     Assume that general-purpose registers are 32 bits wide.
15398
15399`-mgp64'
15400     Assume that general-purpose registers are 64 bits wide.
15401
15402`-mfp32'
15403     Assume that floating-point registers are 32 bits wide.
15404
15405`-mfp64'
15406     Assume that floating-point registers are 64 bits wide.
15407
15408`-mhard-float'
15409     Use floating-point coprocessor instructions.
15410
15411`-msoft-float'
15412     Do not use floating-point coprocessor instructions.  Implement
15413     floating-point calculations using library calls instead.
15414
15415`-mno-float'
15416     Equivalent to `-msoft-float', but additionally asserts that the
15417     program being compiled does not perform any floating-point
15418     operations.  This option is presently supported only by some
15419     bare-metal MIPS configurations, where it may select a special set
15420     of libraries that lack all floating-point support (including, for
15421     example, the floating-point `printf' formats).  If code compiled
15422     with `-mno-float' accidentally contains floating-point operations,
15423     it is likely to suffer a link-time or run-time failure.
15424
15425`-msingle-float'
15426     Assume that the floating-point coprocessor only supports
15427     single-precision operations.
15428
15429`-mdouble-float'
15430     Assume that the floating-point coprocessor supports
15431     double-precision operations.  This is the default.
15432
15433`-mllsc'
15434`-mno-llsc'
15435     Use (do not use) `ll', `sc', and `sync' instructions to implement
15436     atomic memory built-in functions.  When neither option is
15437     specified, GCC uses the instructions if the target architecture
15438     supports them.
15439
15440     `-mllsc' is useful if the runtime environment can emulate the
15441     instructions and `-mno-llsc' can be useful when compiling for
15442     nonstandard ISAs.  You can make either option the default by
15443     configuring GCC with `--with-llsc' and `--without-llsc'
15444     respectively.  `--with-llsc' is the default for some
15445     configurations; see the installation documentation for details.
15446
15447`-mdsp'
15448`-mno-dsp'
15449     Use (do not use) revision 1 of the MIPS DSP ASE.  *Note MIPS DSP
15450     Built-in Functions::.  This option defines the preprocessor macro
15451     `__mips_dsp'.  It also defines `__mips_dsp_rev' to 1.
15452
15453`-mdspr2'
15454`-mno-dspr2'
15455     Use (do not use) revision 2 of the MIPS DSP ASE.  *Note MIPS DSP
15456     Built-in Functions::.  This option defines the preprocessor macros
15457     `__mips_dsp' and `__mips_dspr2'.  It also defines `__mips_dsp_rev'
15458     to 2.
15459
15460`-msmartmips'
15461`-mno-smartmips'
15462     Use (do not use) the MIPS SmartMIPS ASE.
15463
15464`-mpaired-single'
15465`-mno-paired-single'
15466     Use (do not use) paired-single floating-point instructions.  *Note
15467     MIPS Paired-Single Support::.  This option requires hardware
15468     floating-point support to be enabled.
15469
15470`-mdmx'
15471`-mno-mdmx'
15472     Use (do not use) MIPS Digital Media Extension instructions.  This
15473     option can only be used when generating 64-bit code and requires
15474     hardware floating-point support to be enabled.
15475
15476`-mips3d'
15477`-mno-mips3d'
15478     Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
15479     Functions::.  The option `-mips3d' implies `-mpaired-single'.
15480
15481`-mmt'
15482`-mno-mt'
15483     Use (do not use) MT Multithreading instructions.
15484
15485`-mmcu'
15486`-mno-mcu'
15487     Use (do not use) the MIPS MCU ASE instructions.
15488
15489`-mlong64'
15490     Force `long' types to be 64 bits wide.  See `-mlong32' for an
15491     explanation of the default and the way that the pointer size is
15492     determined.
15493
15494`-mlong32'
15495     Force `long', `int', and pointer types to be 32 bits wide.
15496
15497     The default size of `int's, `long's and pointers depends on the
15498     ABI.  All the supported ABIs use 32-bit `int's.  The n64 ABI uses
15499     64-bit `long's, as does the 64-bit EABI; the others use 32-bit
15500     `long's.  Pointers are the same size as `long's, or the same size
15501     as integer registers, whichever is smaller.
15502
15503`-msym32'
15504`-mno-sym32'
15505     Assume (do not assume) that all symbols have 32-bit values,
15506     regardless of the selected ABI.  This option is useful in
15507     combination with `-mabi=64' and `-mno-abicalls' because it allows
15508     GCC to generate shorter and faster references to symbolic
15509     addresses.
15510
15511`-G NUM'
15512     Put definitions of externally-visible data in a small data section
15513     if that data is no bigger than NUM bytes.  GCC can then generate
15514     more efficient accesses to the data; see `-mgpopt' for details.
15515
15516     The default `-G' option depends on the configuration.
15517
15518`-mlocal-sdata'
15519`-mno-local-sdata'
15520     Extend (do not extend) the `-G' behavior to local data too, such
15521     as to static variables in C.  `-mlocal-sdata' is the default for
15522     all configurations.
15523
15524     If the linker complains that an application is using too much
15525     small data, you might want to try rebuilding the less
15526     performance-critical parts with `-mno-local-sdata'.  You might
15527     also want to build large libraries with `-mno-local-sdata', so
15528     that the libraries leave more room for the main program.
15529
15530`-mextern-sdata'
15531`-mno-extern-sdata'
15532     Assume (do not assume) that externally-defined data is in a small
15533     data section if the size of that data is within the `-G' limit.
15534     `-mextern-sdata' is the default for all configurations.
15535
15536     If you compile a module MOD with `-mextern-sdata' `-G NUM'
15537     `-mgpopt', and MOD references a variable VAR that is no bigger
15538     than NUM bytes, you must make sure that VAR is placed in a small
15539     data section.  If VAR is defined by another module, you must
15540     either compile that module with a high-enough `-G' setting or
15541     attach a `section' attribute to VAR's definition.  If VAR is
15542     common, you must link the application with a high-enough `-G'
15543     setting.
15544
15545     The easiest way of satisfying these restrictions is to compile and
15546     link every module with the same `-G' option.  However, you may
15547     wish to build a library that supports several different small data
15548     limits.  You can do this by compiling the library with the highest
15549     supported `-G' setting and additionally using `-mno-extern-sdata'
15550     to stop the library from making assumptions about
15551     externally-defined data.
15552
15553`-mgpopt'
15554`-mno-gpopt'
15555     Use (do not use) GP-relative accesses for symbols that are known
15556     to be in a small data section; see `-G', `-mlocal-sdata' and
15557     `-mextern-sdata'.  `-mgpopt' is the default for all configurations.
15558
15559     `-mno-gpopt' is useful for cases where the `$gp' register might
15560     not hold the value of `_gp'.  For example, if the code is part of
15561     a library that might be used in a boot monitor, programs that call
15562     boot monitor routines pass an unknown value in `$gp'.  (In such
15563     situations, the boot monitor itself is usually compiled with
15564     `-G0'.)
15565
15566     `-mno-gpopt' implies `-mno-local-sdata' and `-mno-extern-sdata'.
15567
15568`-membedded-data'
15569`-mno-embedded-data'
15570     Allocate variables to the read-only data section first if
15571     possible, then next in the small data section if possible,
15572     otherwise in data.  This gives slightly slower code than the
15573     default, but reduces the amount of RAM required when executing,
15574     and thus may be preferred for some embedded systems.
15575
15576`-muninit-const-in-rodata'
15577`-mno-uninit-const-in-rodata'
15578     Put uninitialized `const' variables in the read-only data section.
15579     This option is only meaningful in conjunction with
15580     `-membedded-data'.
15581
15582`-mcode-readable=SETTING'
15583     Specify whether GCC may generate code that reads from executable
15584     sections.  There are three possible settings:
15585
15586    `-mcode-readable=yes'
15587          Instructions may freely access executable sections.  This is
15588          the default setting.
15589
15590    `-mcode-readable=pcrel'
15591          MIPS16 PC-relative load instructions can access executable
15592          sections, but other instructions must not do so.  This option
15593          is useful on 4KSc and 4KSd processors when the code TLBs have
15594          the Read Inhibit bit set.  It is also useful on processors
15595          that can be configured to have a dual instruction/data SRAM
15596          interface and that, like the M4K, automatically redirect
15597          PC-relative loads to the instruction RAM.
15598
15599    `-mcode-readable=no'
15600          Instructions must not access executable sections.  This
15601          option can be useful on targets that are configured to have a
15602          dual instruction/data SRAM interface but that (unlike the
15603          M4K) do not automatically redirect PC-relative loads to the
15604          instruction RAM.
15605
15606`-msplit-addresses'
15607`-mno-split-addresses'
15608     Enable (disable) use of the `%hi()' and `%lo()' assembler
15609     relocation operators.  This option has been superseded by
15610     `-mexplicit-relocs' but is retained for backwards compatibility.
15611
15612`-mexplicit-relocs'
15613`-mno-explicit-relocs'
15614     Use (do not use) assembler relocation operators when dealing with
15615     symbolic addresses.  The alternative, selected by
15616     `-mno-explicit-relocs', is to use assembler macros instead.
15617
15618     `-mexplicit-relocs' is the default if GCC was configured to use an
15619     assembler that supports relocation operators.
15620
15621`-mcheck-zero-division'
15622`-mno-check-zero-division'
15623     Trap (do not trap) on integer division by zero.
15624
15625     The default is `-mcheck-zero-division'.
15626
15627`-mdivide-traps'
15628`-mdivide-breaks'
15629     MIPS systems check for division by zero by generating either a
15630     conditional trap or a break instruction.  Using traps results in
15631     smaller code, but is only supported on MIPS II and later.  Also,
15632     some versions of the Linux kernel have a bug that prevents trap
15633     from generating the proper signal (`SIGFPE').  Use
15634     `-mdivide-traps' to allow conditional traps on architectures that
15635     support them and `-mdivide-breaks' to force the use of breaks.
15636
15637     The default is usually `-mdivide-traps', but this can be
15638     overridden at configure time using `--with-divide=breaks'.
15639     Divide-by-zero checks can be completely disabled using
15640     `-mno-check-zero-division'.
15641
15642`-mmemcpy'
15643`-mno-memcpy'
15644     Force (do not force) the use of `memcpy()' for non-trivial block
15645     moves.  The default is `-mno-memcpy', which allows GCC to inline
15646     most constant-sized copies.
15647
15648`-mlong-calls'
15649`-mno-long-calls'
15650     Disable (do not disable) use of the `jal' instruction.  Calling
15651     functions using `jal' is more efficient but requires the caller
15652     and callee to be in the same 256 megabyte segment.
15653
15654     This option has no effect on abicalls code.  The default is
15655     `-mno-long-calls'.
15656
15657`-mmad'
15658`-mno-mad'
15659     Enable (disable) use of the `mad', `madu' and `mul' instructions,
15660     as provided by the R4650 ISA.
15661
15662`-mfused-madd'
15663`-mno-fused-madd'
15664     Enable (disable) use of the floating-point multiply-accumulate
15665     instructions, when they are available.  The default is
15666     `-mfused-madd'.
15667
15668     On the R8000 CPU when multiply-accumulate instructions are used,
15669     the intermediate product is calculated to infinite precision and
15670     is not subject to the FCSR Flush to Zero bit.  This may be
15671     undesirable in some circumstances.  On other processors the result
15672     is numerically identical to the equivalent computation using
15673     separate multiply, add, subtract and negate instructions.
15674
15675`-nocpp'
15676     Tell the MIPS assembler to not run its preprocessor over user
15677     assembler files (with a `.s' suffix) when assembling them.
15678
15679`-mfix-24k'
15680
15681`-mno-fix-24k'
15682     Work around the 24K E48 (lost data on stores during refill) errata.
15683     The workarounds are implemented by the assembler rather than by
15684     GCC.
15685
15686`-mfix-r4000'
15687`-mno-fix-r4000'
15688     Work around certain R4000 CPU errata:
15689        - A double-word or a variable shift may give an incorrect
15690          result if executed immediately after starting an integer
15691          division.
15692
15693        - A double-word or a variable shift may give an incorrect
15694          result if executed while an integer multiplication is in
15695          progress.
15696
15697        - An integer division may give an incorrect result if started
15698          in a delay slot of a taken branch or a jump.
15699
15700`-mfix-r4400'
15701`-mno-fix-r4400'
15702     Work around certain R4400 CPU errata:
15703        - A double-word or a variable shift may give an incorrect
15704          result if executed immediately after starting an integer
15705          division.
15706
15707`-mfix-r10000'
15708`-mno-fix-r10000'
15709     Work around certain R10000 errata:
15710        - `ll'/`sc' sequences may not behave atomically on revisions
15711          prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
15712
15713     This option can only be used if the target architecture supports
15714     branch-likely instructions.  `-mfix-r10000' is the default when
15715     `-march=r10000' is used; `-mno-fix-r10000' is the default
15716     otherwise.
15717
15718`-mfix-vr4120'
15719`-mno-fix-vr4120'
15720     Work around certain VR4120 errata:
15721        - `dmultu' does not always produce the correct result.
15722
15723        - `div' and `ddiv' do not always produce the correct result if
15724          one of the operands is negative.
15725     The workarounds for the division errata rely on special functions
15726     in `libgcc.a'.  At present, these functions are only provided by
15727     the `mips64vr*-elf' configurations.
15728
15729     Other VR4120 errata require a NOP to be inserted between certain
15730     pairs of instructions.  These errata are handled by the assembler,
15731     not by GCC itself.
15732
15733`-mfix-vr4130'
15734     Work around the VR4130 `mflo'/`mfhi' errata.  The workarounds are
15735     implemented by the assembler rather than by GCC, although GCC
15736     avoids using `mflo' and `mfhi' if the VR4130 `macc', `macchi',
15737     `dmacc' and `dmacchi' instructions are available instead.
15738
15739`-mfix-sb1'
15740`-mno-fix-sb1'
15741     Work around certain SB-1 CPU core errata.  (This flag currently
15742     works around the SB-1 revision 2 "F1" and "F2" floating-point
15743     errata.)
15744
15745`-mr10k-cache-barrier=SETTING'
15746     Specify whether GCC should insert cache barriers to avoid the
15747     side-effects of speculation on R10K processors.
15748
15749     In common with many processors, the R10K tries to predict the
15750     outcome of a conditional branch and speculatively executes
15751     instructions from the "taken" branch.  It later aborts these
15752     instructions if the predicted outcome is wrong.  However, on the
15753     R10K, even aborted instructions can have side effects.
15754
15755     This problem only affects kernel stores and, depending on the
15756     system, kernel loads.  As an example, a speculatively-executed
15757     store may load the target memory into cache and mark the cache
15758     line as dirty, even if the store itself is later aborted.  If a
15759     DMA operation writes to the same area of memory before the "dirty"
15760     line is flushed, the cached data overwrites the DMA-ed data.  See
15761     the R10K processor manual for a full description, including other
15762     potential problems.
15763
15764     One workaround is to insert cache barrier instructions before
15765     every memory access that might be speculatively executed and that
15766     might have side effects even if aborted.
15767     `-mr10k-cache-barrier=SETTING' controls GCC's implementation of
15768     this workaround.  It assumes that aborted accesses to any byte in
15769     the following regions does not have side effects:
15770
15771       1. the memory occupied by the current function's stack frame;
15772
15773       2. the memory occupied by an incoming stack argument;
15774
15775       3. the memory occupied by an object with a link-time-constant
15776          address.
15777
15778     It is the kernel's responsibility to ensure that speculative
15779     accesses to these regions are indeed safe.
15780
15781     If the input program contains a function declaration such as:
15782
15783          void foo (void);
15784
15785     then the implementation of `foo' must allow `j foo' and `jal foo'
15786     to be executed speculatively.  GCC honors this restriction for
15787     functions it compiles itself.  It expects non-GCC functions (such
15788     as hand-written assembly code) to do the same.
15789
15790     The option has three forms:
15791
15792    `-mr10k-cache-barrier=load-store'
15793          Insert a cache barrier before a load or store that might be
15794          speculatively executed and that might have side effects even
15795          if aborted.
15796
15797    `-mr10k-cache-barrier=store'
15798          Insert a cache barrier before a store that might be
15799          speculatively executed and that might have side effects even
15800          if aborted.
15801
15802    `-mr10k-cache-barrier=none'
15803          Disable the insertion of cache barriers.  This is the default
15804          setting.
15805
15806`-mflush-func=FUNC'
15807`-mno-flush-func'
15808     Specifies the function to call to flush the I and D caches, or to
15809     not call any such function.  If called, the function must take the
15810     same arguments as the common `_flush_func()', that is, the address
15811     of the memory range for which the cache is being flushed, the size
15812     of the memory range, and the number 3 (to flush both caches).  The
15813     default depends on the target GCC was configured for, but commonly
15814     is either `_flush_func' or `__cpu_flush'.
15815
15816`mbranch-cost=NUM'
15817     Set the cost of branches to roughly NUM "simple" instructions.
15818     This cost is only a heuristic and is not guaranteed to produce
15819     consistent results across releases.  A zero cost redundantly
15820     selects the default, which is based on the `-mtune' setting.
15821
15822`-mbranch-likely'
15823`-mno-branch-likely'
15824     Enable or disable use of Branch Likely instructions, regardless of
15825     the default for the selected architecture.  By default, Branch
15826     Likely instructions may be generated if they are supported by the
15827     selected architecture.  An exception is for the MIPS32 and MIPS64
15828     architectures and processors that implement those architectures;
15829     for those, Branch Likely instructions are not be generated by
15830     default because the MIPS32 and MIPS64 architectures specifically
15831     deprecate their use.
15832
15833`-mfp-exceptions'
15834`-mno-fp-exceptions'
15835     Specifies whether FP exceptions are enabled.  This affects how FP
15836     instructions are scheduled for some processors.  The default is
15837     that FP exceptions are enabled.
15838
15839     For instance, on the SB-1, if FP exceptions are disabled, and we
15840     are emitting 64-bit code, then we can use both FP pipes.
15841     Otherwise, we can only use one FP pipe.
15842
15843`-mvr4130-align'
15844`-mno-vr4130-align'
15845     The VR4130 pipeline is two-way superscalar, but can only issue two
15846     instructions together if the first one is 8-byte aligned.  When
15847     this option is enabled, GCC aligns pairs of instructions that it
15848     thinks should execute in parallel.
15849
15850     This option only has an effect when optimizing for the VR4130.  It
15851     normally makes code faster, but at the expense of making it bigger.
15852     It is enabled by default at optimization level `-O3'.
15853
15854`-msynci'
15855`-mno-synci'
15856     Enable (disable) generation of `synci' instructions on
15857     architectures that support it.  The `synci' instructions (if
15858     enabled) are generated when `__builtin___clear_cache()' is
15859     compiled.
15860
15861     This option defaults to `-mno-synci', but the default can be
15862     overridden by configuring with `--with-synci'.
15863
15864     When compiling code for single processor systems, it is generally
15865     safe to use `synci'.  However, on many multi-core (SMP) systems, it
15866     does not invalidate the instruction caches on all cores and may
15867     lead to undefined behavior.
15868
15869`-mrelax-pic-calls'
15870`-mno-relax-pic-calls'
15871     Try to turn PIC calls that are normally dispatched via register
15872     `$25' into direct calls.  This is only possible if the linker can
15873     resolve the destination at link-time and if the destination is
15874     within range for a direct call.
15875
15876     `-mrelax-pic-calls' is the default if GCC was configured to use an
15877     assembler and a linker that support the `.reloc' assembly
15878     directive and `-mexplicit-relocs' is in effect.  With
15879     `-mno-explicit-relocs', this optimization can be performed by the
15880     assembler and the linker alone without help from the compiler.
15881
15882`-mmcount-ra-address'
15883`-mno-mcount-ra-address'
15884     Emit (do not emit) code that allows `_mcount' to modify the
15885     calling function's return address.  When enabled, this option
15886     extends the usual `_mcount' interface with a new RA-ADDRESS
15887     parameter, which has type `intptr_t *' and is passed in register
15888     `$12'.  `_mcount' can then modify the return address by doing both
15889     of the following:
15890        * Returning the new address in register `$31'.
15891
15892        * Storing the new address in `*RA-ADDRESS', if RA-ADDRESS is
15893          nonnull.
15894
15895     The default is `-mno-mcount-ra-address'.
15896
15897
15898
15899File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options
15900
159013.17.27 MMIX Options
15902--------------------
15903
15904These options are defined for the MMIX:
15905
15906`-mlibfuncs'
15907`-mno-libfuncs'
15908     Specify that intrinsic library functions are being compiled,
15909     passing all values in registers, no matter the size.
15910
15911`-mepsilon'
15912`-mno-epsilon'
15913     Generate floating-point comparison instructions that compare with
15914     respect to the `rE' epsilon register.
15915
15916`-mabi=mmixware'
15917`-mabi=gnu'
15918     Generate code that passes function parameters and return values
15919     that (in the called function) are seen as registers `$0' and up,
15920     as opposed to the GNU ABI which uses global registers `$231' and
15921     up.
15922
15923`-mzero-extend'
15924`-mno-zero-extend'
15925     When reading data from memory in sizes shorter than 64 bits, use
15926     (do not use) zero-extending load instructions by default, rather
15927     than sign-extending ones.
15928
15929`-mknuthdiv'
15930`-mno-knuthdiv'
15931     Make the result of a division yielding a remainder have the same
15932     sign as the divisor.  With the default, `-mno-knuthdiv', the sign
15933     of the remainder follows the sign of the dividend.  Both methods
15934     are arithmetically valid, the latter being almost exclusively used.
15935
15936`-mtoplevel-symbols'
15937`-mno-toplevel-symbols'
15938     Prepend (do not prepend) a `:' to all global symbols, so the
15939     assembly code can be used with the `PREFIX' assembly directive.
15940
15941`-melf'
15942     Generate an executable in the ELF format, rather than the default
15943     `mmo' format used by the `mmix' simulator.
15944
15945`-mbranch-predict'
15946`-mno-branch-predict'
15947     Use (do not use) the probable-branch instructions, when static
15948     branch prediction indicates a probable branch.
15949
15950`-mbase-addresses'
15951`-mno-base-addresses'
15952     Generate (do not generate) code that uses _base addresses_.  Using
15953     a base address automatically generates a request (handled by the
15954     assembler and the linker) for a constant to be set up in a global
15955     register.  The register is used for one or more base address
15956     requests within the range 0 to 255 from the value held in the
15957     register.  The generally leads to short and fast code, but the
15958     number of different data items that can be addressed is limited.
15959     This means that a program that uses lots of static data may
15960     require `-mno-base-addresses'.
15961
15962`-msingle-exit'
15963`-mno-single-exit'
15964     Force (do not force) generated code to have a single exit point in
15965     each function.
15966
15967
15968File: gcc.info,  Node: MN10300 Options,  Next: Moxie Options,  Prev: MMIX Options,  Up: Submodel Options
15969
159703.17.28 MN10300 Options
15971-----------------------
15972
15973These `-m' options are defined for Matsushita MN10300 architectures:
15974
15975`-mmult-bug'
15976     Generate code to avoid bugs in the multiply instructions for the
15977     MN10300 processors.  This is the default.
15978
15979`-mno-mult-bug'
15980     Do not generate code to avoid bugs in the multiply instructions
15981     for the MN10300 processors.
15982
15983`-mam33'
15984     Generate code using features specific to the AM33 processor.
15985
15986`-mno-am33'
15987     Do not generate code using features specific to the AM33
15988     processor.  This is the default.
15989
15990`-mam33-2'
15991     Generate code using features specific to the AM33/2.0 processor.
15992
15993`-mam34'
15994     Generate code using features specific to the AM34 processor.
15995
15996`-mtune=CPU-TYPE'
15997     Use the timing characteristics of the indicated CPU type when
15998     scheduling instructions.  This does not change the targeted
15999     processor type.  The CPU type must be one of `mn10300', `am33',
16000     `am33-2' or `am34'.
16001
16002`-mreturn-pointer-on-d0'
16003     When generating a function that returns a pointer, return the
16004     pointer in both `a0' and `d0'.  Otherwise, the pointer is returned
16005     only in `a0', and attempts to call such functions without a
16006     prototype result in errors.  Note that this option is on by
16007     default; use `-mno-return-pointer-on-d0' to disable it.
16008
16009`-mno-crt0'
16010     Do not link in the C run-time initialization object file.
16011
16012`-mrelax'
16013     Indicate to the linker that it should perform a relaxation
16014     optimization pass to shorten branches, calls and absolute memory
16015     addresses.  This option only has an effect when used on the
16016     command line for the final link step.
16017
16018     This option makes symbolic debugging impossible.
16019
16020`-mliw'
16021     Allow the compiler to generate _Long Instruction Word_
16022     instructions if the target is the `AM33' or later.  This is the
16023     default.  This option defines the preprocessor macro `__LIW__'.
16024
16025`-mnoliw'
16026     Do not allow the compiler to generate _Long Instruction Word_
16027     instructions.  This option defines the preprocessor macro
16028     `__NO_LIW__'.
16029
16030`-msetlb'
16031     Allow the compiler to generate the _SETLB_ and _Lcc_ instructions
16032     if the target is the `AM33' or later.  This is the default.  This
16033     option defines the preprocessor macro `__SETLB__'.
16034
16035`-mnosetlb'
16036     Do not allow the compiler to generate _SETLB_ or _Lcc_
16037     instructions.  This option defines the preprocessor macro
16038     `__NO_SETLB__'.
16039
16040
16041
16042File: gcc.info,  Node: Moxie Options,  Next: PDP-11 Options,  Prev: MN10300 Options,  Up: Submodel Options
16043
160443.17.29 Moxie Options
16045---------------------
16046
16047`-meb'
16048     Generate big-endian code.  This is the default for `moxie-*-*'
16049     configurations.
16050
16051`-mel'
16052     Generate little-endian code.
16053
16054`-mno-crt0'
16055     Do not link in the C run-time initialization object file.
16056
16057
16058
16059File: gcc.info,  Node: PDP-11 Options,  Next: picoChip Options,  Prev: Moxie Options,  Up: Submodel Options
16060
160613.17.30 PDP-11 Options
16062----------------------
16063
16064These options are defined for the PDP-11:
16065
16066`-mfpu'
16067     Use hardware FPP floating point.  This is the default.  (FIS
16068     floating point on the PDP-11/40 is not supported.)
16069
16070`-msoft-float'
16071     Do not use hardware floating point.
16072
16073`-mac0'
16074     Return floating-point results in ac0 (fr0 in Unix assembler
16075     syntax).
16076
16077`-mno-ac0'
16078     Return floating-point results in memory.  This is the default.
16079
16080`-m40'
16081     Generate code for a PDP-11/40.
16082
16083`-m45'
16084     Generate code for a PDP-11/45.  This is the default.
16085
16086`-m10'
16087     Generate code for a PDP-11/10.
16088
16089`-mbcopy-builtin'
16090     Use inline `movmemhi' patterns for copying memory.  This is the
16091     default.
16092
16093`-mbcopy'
16094     Do not use inline `movmemhi' patterns for copying memory.
16095
16096`-mint16'
16097`-mno-int32'
16098     Use 16-bit `int'.  This is the default.
16099
16100`-mint32'
16101`-mno-int16'
16102     Use 32-bit `int'.
16103
16104`-mfloat64'
16105`-mno-float32'
16106     Use 64-bit `float'.  This is the default.
16107
16108`-mfloat32'
16109`-mno-float64'
16110     Use 32-bit `float'.
16111
16112`-mabshi'
16113     Use `abshi2' pattern.  This is the default.
16114
16115`-mno-abshi'
16116     Do not use `abshi2' pattern.
16117
16118`-mbranch-expensive'
16119     Pretend that branches are expensive.  This is for experimenting
16120     with code generation only.
16121
16122`-mbranch-cheap'
16123     Do not pretend that branches are expensive.  This is the default.
16124
16125`-munix-asm'
16126     Use Unix assembler syntax.  This is the default when configured for
16127     `pdp11-*-bsd'.
16128
16129`-mdec-asm'
16130     Use DEC assembler syntax.  This is the default when configured for
16131     any PDP-11 target other than `pdp11-*-bsd'.
16132
16133
16134File: gcc.info,  Node: picoChip Options,  Next: PowerPC Options,  Prev: PDP-11 Options,  Up: Submodel Options
16135
161363.17.31 picoChip Options
16137------------------------
16138
16139These `-m' options are defined for picoChip implementations:
16140
16141`-mae=AE_TYPE'
16142     Set the instruction set, register set, and instruction scheduling
16143     parameters for array element type AE_TYPE.  Supported values for
16144     AE_TYPE are `ANY', `MUL', and `MAC'.
16145
16146     `-mae=ANY' selects a completely generic AE type.  Code generated
16147     with this option runs on any of the other AE types.  The code is
16148     not as efficient as it would be if compiled for a specific AE
16149     type, and some types of operation (e.g., multiplication) do not
16150     work properly on all types of AE.
16151
16152     `-mae=MUL' selects a MUL AE type.  This is the most useful AE type
16153     for compiled code, and is the default.
16154
16155     `-mae=MAC' selects a DSP-style MAC AE.  Code compiled with this
16156     option may suffer from poor performance of byte (char)
16157     manipulation, since the DSP AE does not provide hardware support
16158     for byte load/stores.
16159
16160`-msymbol-as-address'
16161     Enable the compiler to directly use a symbol name as an address in
16162     a load/store instruction, without first loading it into a
16163     register.  Typically, the use of this option generates larger
16164     programs, which run faster than when the option isn't used.
16165     However, the results vary from program to program, so it is left
16166     as a user option, rather than being permanently enabled.
16167
16168`-mno-inefficient-warnings'
16169     Disables warnings about the generation of inefficient code.  These
16170     warnings can be generated, for example, when compiling code that
16171     performs byte-level memory operations on the MAC AE type.  The MAC
16172     AE has no hardware support for byte-level memory operations, so
16173     all byte load/stores must be synthesized from word load/store
16174     operations.  This is inefficient and a warning is generated to
16175     indicate that you should rewrite the code to avoid byte
16176     operations, or to target an AE type that has the necessary
16177     hardware support.  This option disables these warnings.
16178
16179
16180
16181File: gcc.info,  Node: PowerPC Options,  Next: RL78 Options,  Prev: picoChip Options,  Up: Submodel Options
16182
161833.17.32 PowerPC Options
16184-----------------------
16185
16186These are listed under *Note RS/6000 and PowerPC Options::.
16187
16188
16189File: gcc.info,  Node: RL78 Options,  Next: RS/6000 and PowerPC Options,  Prev: PowerPC Options,  Up: Submodel Options
16190
161913.17.33 RL78 Options
16192--------------------
16193
16194`-msim'
16195     Links in additional target libraries to support operation within a
16196     simulator.
16197
16198`-mmul=none'
16199`-mmul=g13'
16200`-mmul=rl78'
16201     Specifies the type of hardware multiplication support to be used.
16202     The default is `none', which uses software multiplication
16203     functions.  The `g13' option is for the hardware multiply/divide
16204     peripheral only on the RL78/G13 targets.  The `rl78' option is for
16205     the standard hardware multiplication defined in the RL78 software
16206     manual.
16207
16208
16209
16210File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: RX Options,  Prev: RL78 Options,  Up: Submodel Options
16211
162123.17.34 IBM RS/6000 and PowerPC Options
16213---------------------------------------
16214
16215These `-m' options are defined for the IBM RS/6000 and PowerPC:
16216`-mpowerpc-gpopt'
16217`-mno-powerpc-gpopt'
16218`-mpowerpc-gfxopt'
16219`-mno-powerpc-gfxopt'
16220`-mpowerpc64'
16221`-mno-powerpc64'
16222`-mmfcrf'
16223`-mno-mfcrf'
16224`-mpopcntb'
16225`-mno-popcntb'
16226`-mpopcntd'
16227`-mno-popcntd'
16228`-mfprnd'
16229`-mno-fprnd'
16230`-mcmpb'
16231`-mno-cmpb'
16232`-mmfpgpr'
16233`-mno-mfpgpr'
16234`-mhard-dfp'
16235`-mno-hard-dfp'
16236     You use these options to specify which instructions are available
16237     on the processor you are using.  The default value of these
16238     options is determined when configuring GCC.  Specifying the
16239     `-mcpu=CPU_TYPE' overrides the specification of these options.  We
16240     recommend you use the `-mcpu=CPU_TYPE' option rather than the
16241     options listed above.
16242
16243     Specifying `-mpowerpc-gpopt' allows GCC to use the optional
16244     PowerPC architecture instructions in the General Purpose group,
16245     including floating-point square root.  Specifying
16246     `-mpowerpc-gfxopt' allows GCC to use the optional PowerPC
16247     architecture instructions in the Graphics group, including
16248     floating-point select.
16249
16250     The `-mmfcrf' option allows GCC to generate the move from
16251     condition register field instruction implemented on the POWER4
16252     processor and other processors that support the PowerPC V2.01
16253     architecture.  The `-mpopcntb' option allows GCC to generate the
16254     popcount and double-precision FP reciprocal estimate instruction
16255     implemented on the POWER5 processor and other processors that
16256     support the PowerPC V2.02 architecture.  The `-mpopcntd' option
16257     allows GCC to generate the popcount instruction implemented on the
16258     POWER7 processor and other processors that support the PowerPC
16259     V2.06 architecture.  The `-mfprnd' option allows GCC to generate
16260     the FP round to integer instructions implemented on the POWER5+
16261     processor and other processors that support the PowerPC V2.03
16262     architecture.  The `-mcmpb' option allows GCC to generate the
16263     compare bytes instruction implemented on the POWER6 processor and
16264     other processors that support the PowerPC V2.05 architecture.  The
16265     `-mmfpgpr' option allows GCC to generate the FP move to/from
16266     general-purpose register instructions implemented on the POWER6X
16267     processor and other processors that support the extended PowerPC
16268     V2.05 architecture.  The `-mhard-dfp' option allows GCC to
16269     generate the decimal floating-point instructions implemented on
16270     some POWER processors.
16271
16272     The `-mpowerpc64' option allows GCC to generate the additional
16273     64-bit instructions that are found in the full PowerPC64
16274     architecture and to treat GPRs as 64-bit, doubleword quantities.
16275     GCC defaults to `-mno-powerpc64'.
16276
16277`-mcpu=CPU_TYPE'
16278     Set architecture type, register usage, and instruction scheduling
16279     parameters for machine type CPU_TYPE.  Supported values for
16280     CPU_TYPE are `401', `403', `405', `405fp', `440', `440fp', `464',
16281     `464fp', `476', `476fp', `505', `601', `602', `603', `603e',
16282     `604', `604e', `620', `630', `740', `7400', `7450', `750', `801',
16283     `821', `823', `860', `970', `8540', `a2', `e300c2', `e300c3',
16284     `e500mc', `e500mc64', `e5500', `e6500', `ec603e', `G3', `G4', `G5',
16285     `titan', `power3', `power4', `power5', `power5+', `power6',
16286     `power6x', `power7', `power8', `powerpc', `powerpc64',
16287     `powerpc64le', and `rs64'.
16288
16289     `-mcpu=powerpc', `-mcpu=powerpc64', and `-mcpu=powerpc64le'
16290     specify pure 32-bit PowerPC (either endian), 64-bit big endian
16291     PowerPC and 64-bit little endian PowerPC architecture machine
16292     types, with an appropriate, generic processor model assumed for
16293     scheduling purposes.
16294
16295     The other options specify a specific processor.  Code generated
16296     under those options runs best on that processor, and may not run
16297     at all on others.
16298
16299     The `-mcpu' options automatically enable or disable the following
16300     options:
16301
16302          -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
16303          -mpopcntb -mpopcntd  -mpowerpc64
16304          -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float
16305          -msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr -mvsx
16306          -mcrypto -mdirect-move -mpower8-fusion -mpower8-vector
16307          -mquad-memory -mquad-memory-atomic
16308
16309     The particular options set for any particular CPU varies between
16310     compiler versions, depending on what setting seems to produce
16311     optimal code for that CPU; it doesn't necessarily reflect the
16312     actual hardware's capabilities.  If you wish to set an individual
16313     option to a particular value, you may specify it after the `-mcpu'
16314     option, like `-mcpu=970 -mno-altivec'.
16315
16316     On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled
16317     or disabled by the `-mcpu' option at present because AIX does not
16318     have full support for these options.  You may still enable or
16319     disable them individually if you're sure it'll work in your
16320     environment.
16321
16322`-mtune=CPU_TYPE'
16323     Set the instruction scheduling parameters for machine type
16324     CPU_TYPE, but do not set the architecture type or register usage,
16325     as `-mcpu=CPU_TYPE' does.  The same values for CPU_TYPE are used
16326     for `-mtune' as for `-mcpu'.  If both are specified, the code
16327     generated uses the architecture and registers set by `-mcpu', but
16328     the scheduling parameters set by `-mtune'.
16329
16330`-mcmodel=small'
16331     Generate PowerPC64 code for the small model: The TOC is limited to
16332     64k.
16333
16334`-mcmodel=medium'
16335     Generate PowerPC64 code for the medium model: The TOC and other
16336     static data may be up to a total of 4G in size.
16337
16338`-mcmodel=large'
16339     Generate PowerPC64 code for the large model: The TOC may be up to
16340     4G in size.  Other data and code is only limited by the 64-bit
16341     address space.
16342
16343`-maltivec'
16344`-mno-altivec'
16345     Generate code that uses (does not use) AltiVec instructions, and
16346     also enable the use of built-in functions that allow more direct
16347     access to the AltiVec instruction set.  You may also need to set
16348     `-mabi=altivec' to adjust the current ABI with AltiVec ABI
16349     enhancements.
16350
16351     When `-maltivec' is used, rather than `-maltivec=le' or
16352     `-maltivec=be', the element order for Altivec intrinsics such as
16353     `vec_splat', `vec_extract', and `vec_insert' will match array
16354     element order corresponding to the endianness of the target.  That
16355     is, element zero identifies the leftmost element in a vector
16356     register when targeting a big-endian platform, and identifies the
16357     rightmost element in a vector register when targeting a
16358     little-endian platform.
16359
16360`-maltivec=be'
16361     Generate Altivec instructions using big-endian element order,
16362     regardless of whether the target is big- or little-endian.  This is
16363     the default when targeting a big-endian platform.
16364
16365     The element order is used to interpret element numbers in Altivec
16366     intrinsics such as `vec_splat', `vec_extract', and `vec_insert'.
16367     By default, these will match array element order corresponding to
16368     the endianness for the target.
16369
16370`-maltivec=le'
16371     Generate Altivec instructions using little-endian element order,
16372     regardless of whether the target is big- or little-endian.  This is
16373     the default when targeting a little-endian platform.  This option
16374     is currently ignored when targeting a big-endian platform.
16375
16376     The element order is used to interpret element numbers in Altivec
16377     intrinsics such as `vec_splat', `vec_extract', and `vec_insert'.
16378     By default, these will match array element order corresponding to
16379     the endianness for the target.
16380
16381`-mvrsave'
16382`-mno-vrsave'
16383     Generate VRSAVE instructions when generating AltiVec code.
16384
16385`-mgen-cell-microcode'
16386     Generate Cell microcode instructions.
16387
16388`-mwarn-cell-microcode'
16389     Warn when a Cell microcode instruction is emitted.  An example of
16390     a Cell microcode instruction is a variable shift.
16391
16392`-msecure-plt'
16393     Generate code that allows `ld' and `ld.so' to build executables
16394     and shared libraries with non-executable `.plt' and `.got'
16395     sections.  This is a PowerPC 32-bit SYSV ABI option.
16396
16397`-mbss-plt'
16398     Generate code that uses a BSS `.plt' section that `ld.so' fills
16399     in, and requires `.plt' and `.got' sections that are both writable
16400     and executable.  This is a PowerPC 32-bit SYSV ABI option.
16401
16402`-misel'
16403`-mno-isel'
16404     This switch enables or disables the generation of ISEL
16405     instructions.
16406
16407`-misel=YES/NO'
16408     This switch has been deprecated.  Use `-misel' and `-mno-isel'
16409     instead.
16410
16411`-mspe'
16412`-mno-spe'
16413     This switch enables or disables the generation of SPE simd
16414     instructions.
16415
16416`-mpaired'
16417`-mno-paired'
16418     This switch enables or disables the generation of PAIRED simd
16419     instructions.
16420
16421`-mspe=YES/NO'
16422     This option has been deprecated.  Use `-mspe' and `-mno-spe'
16423     instead.
16424
16425`-mvsx'
16426`-mno-vsx'
16427     Generate code that uses (does not use) vector/scalar (VSX)
16428     instructions, and also enable the use of built-in functions that
16429     allow more direct access to the VSX instruction set.
16430
16431`-mcrypto'
16432`-mno-crypto'
16433     Enable the use (disable) of the built-in functions that allow
16434     direct access to the cryptographic instructions that were added in
16435     version 2.07 of the PowerPC ISA.
16436
16437`-mdirect-move'
16438`-mno-direct-move'
16439     Generate code that uses (does not use) the instructions to move
16440     data between the general purpose registers and the vector/scalar
16441     (VSX) registers that were added in version 2.07 of the PowerPC ISA.
16442
16443`-mpower8-fusion'
16444`-mno-power8-fusion'
16445     Generate code that keeps (does not keeps) some integer operations
16446     adjacent so that the instructions can be fused together on power8
16447     and later processors.
16448
16449`-mpower8-vector'
16450`-mno-power8-vector'
16451     Generate code that uses (does not use) the vector and scalar
16452     instructions that were added in version 2.07 of the PowerPC ISA.
16453     Also enable the use of built-in functions that allow more direct
16454     access to the vector instructions.
16455
16456`-mquad-memory'
16457`-mno-quad-memory'
16458     Generate code that uses (does not use) the non-atomic quad word
16459     memory instructions.  The `-mquad-memory' option requires use of
16460     64-bit mode.
16461
16462`-mquad-memory-atomic'
16463`-mno-quad-memory-atomic'
16464     Generate code that uses (does not use) the atomic quad word memory
16465     instructions.  The `-mquad-memory-atomic' option requires use of
16466     64-bit mode.
16467
16468`-mfloat-gprs=YES/SINGLE/DOUBLE/NO'
16469`-mfloat-gprs'
16470     This switch enables or disables the generation of floating-point
16471     operations on the general-purpose registers for architectures that
16472     support it.
16473
16474     The argument YES or SINGLE enables the use of single-precision
16475     floating-point operations.
16476
16477     The argument DOUBLE enables the use of single and double-precision
16478     floating-point operations.
16479
16480     The argument NO disables floating-point operations on the
16481     general-purpose registers.
16482
16483     This option is currently only available on the MPC854x.
16484
16485`-m32'
16486`-m64'
16487     Generate code for 32-bit or 64-bit environments of Darwin and SVR4
16488     targets (including GNU/Linux).  The 32-bit environment sets int,
16489     long and pointer to 32 bits and generates code that runs on any
16490     PowerPC variant.  The 64-bit environment sets int to 32 bits and
16491     long and pointer to 64 bits, and generates code for PowerPC64, as
16492     for `-mpowerpc64'.
16493
16494`-mfull-toc'
16495`-mno-fp-in-toc'
16496`-mno-sum-in-toc'
16497`-mminimal-toc'
16498     Modify generation of the TOC (Table Of Contents), which is created
16499     for every executable file.  The `-mfull-toc' option is selected by
16500     default.  In that case, GCC allocates at least one TOC entry for
16501     each unique non-automatic variable reference in your program.  GCC
16502     also places floating-point constants in the TOC.  However, only
16503     16,384 entries are available in the TOC.
16504
16505     If you receive a linker error message that saying you have
16506     overflowed the available TOC space, you can reduce the amount of
16507     TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc'
16508     options.  `-mno-fp-in-toc' prevents GCC from putting floating-point
16509     constants in the TOC and `-mno-sum-in-toc' forces GCC to generate
16510     code to calculate the sum of an address and a constant at run time
16511     instead of putting that sum into the TOC.  You may specify one or
16512     both of these options.  Each causes GCC to produce very slightly
16513     slower and larger code at the expense of conserving TOC space.
16514
16515     If you still run out of space in the TOC even when you specify
16516     both of these options, specify `-mminimal-toc' instead.  This
16517     option causes GCC to make only one TOC entry for every file.  When
16518     you specify this option, GCC produces code that is slower and
16519     larger but which uses extremely little TOC space.  You may wish to
16520     use this option only on files that contain less
16521     frequently-executed code.
16522
16523`-maix64'
16524`-maix32'
16525     Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
16526     64-bit `long' type, and the infrastructure needed to support them.
16527     Specifying `-maix64' implies `-mpowerpc64', while `-maix32'
16528     disables the 64-bit ABI and implies `-mno-powerpc64'.  GCC
16529     defaults to `-maix32'.
16530
16531`-mxl-compat'
16532`-mno-xl-compat'
16533     Produce code that conforms more closely to IBM XL compiler
16534     semantics when using AIX-compatible ABI.  Pass floating-point
16535     arguments to prototyped functions beyond the register save area
16536     (RSA) on the stack in addition to argument FPRs.  Do not assume
16537     that most significant double in 128-bit long double value is
16538     properly rounded when comparing values and converting to double.
16539     Use XL symbol names for long double support routines.
16540
16541     The AIX calling convention was extended but not initially
16542     documented to handle an obscure K&R C case of calling a function
16543     that takes the address of its arguments with fewer arguments than
16544     declared.  IBM XL compilers access floating-point arguments that
16545     do not fit in the RSA from the stack when a subroutine is compiled
16546     without optimization.  Because always storing floating-point
16547     arguments on the stack is inefficient and rarely needed, this
16548     option is not enabled by default and only is necessary when
16549     calling subroutines compiled by IBM XL compilers without
16550     optimization.
16551
16552`-mpe'
16553     Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
16554     application written to use message passing with special startup
16555     code to enable the application to run.  The system must have PE
16556     installed in the standard location (`/usr/lpp/ppe.poe/'), or the
16557     `specs' file must be overridden with the `-specs=' option to
16558     specify the appropriate directory location.  The Parallel
16559     Environment does not support threads, so the `-mpe' option and the
16560     `-pthread' option are incompatible.
16561
16562`-malign-natural'
16563`-malign-power'
16564     On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
16565     `-malign-natural' overrides the ABI-defined alignment of larger
16566     types, such as floating-point doubles, on their natural size-based
16567     boundary.  The option `-malign-power' instructs GCC to follow the
16568     ABI-specified alignment rules.  GCC defaults to the standard
16569     alignment defined in the ABI.
16570
16571     On 64-bit Darwin, natural alignment is the default, and
16572     `-malign-power' is not supported.
16573
16574`-msoft-float'
16575`-mhard-float'
16576     Generate code that does not use (uses) the floating-point register
16577     set.  Software floating-point emulation is provided if you use the
16578     `-msoft-float' option, and pass the option to GCC when linking.
16579
16580`-msingle-float'
16581`-mdouble-float'
16582     Generate code for single- or double-precision floating-point
16583     operations.  `-mdouble-float' implies `-msingle-float'.
16584
16585`-msimple-fpu'
16586     Do not generate `sqrt' and `div' instructions for hardware
16587     floating-point unit.
16588
16589`-mfpu=NAME'
16590     Specify type of floating-point unit.  Valid values for NAME are
16591     `sp_lite' (equivalent to `-msingle-float -msimple-fpu'), `dp_lite'
16592     (equivalent to `-mdouble-float -msimple-fpu'), `sp_full'
16593     (equivalent to `-msingle-float'), and `dp_full' (equivalent to
16594     `-mdouble-float').
16595
16596`-mxilinx-fpu'
16597     Perform optimizations for the floating-point unit on Xilinx PPC
16598     405/440.
16599
16600`-mmultiple'
16601`-mno-multiple'
16602     Generate code that uses (does not use) the load multiple word
16603     instructions and the store multiple word instructions.  These
16604     instructions are generated by default on POWER systems, and not
16605     generated on PowerPC systems.  Do not use `-mmultiple' on
16606     little-endian PowerPC systems, since those instructions do not
16607     work when the processor is in little-endian mode.  The exceptions
16608     are PPC740 and PPC750 which permit these instructions in
16609     little-endian mode.
16610
16611`-mstring'
16612`-mno-string'
16613     Generate code that uses (does not use) the load string instructions
16614     and the store string word instructions to save multiple registers
16615     and do small block moves.  These instructions are generated by
16616     default on POWER systems, and not generated on PowerPC systems.
16617     Do not use `-mstring' on little-endian PowerPC systems, since those
16618     instructions do not work when the processor is in little-endian
16619     mode.  The exceptions are PPC740 and PPC750 which permit these
16620     instructions in little-endian mode.
16621
16622`-mupdate'
16623`-mno-update'
16624     Generate code that uses (does not use) the load or store
16625     instructions that update the base register to the address of the
16626     calculated memory location.  These instructions are generated by
16627     default.  If you use `-mno-update', there is a small window
16628     between the time that the stack pointer is updated and the address
16629     of the previous frame is stored, which means code that walks the
16630     stack frame across interrupts or signals may get corrupted data.
16631
16632`-mavoid-indexed-addresses'
16633`-mno-avoid-indexed-addresses'
16634     Generate code that tries to avoid (not avoid) the use of indexed
16635     load or store instructions. These instructions can incur a
16636     performance penalty on Power6 processors in certain situations,
16637     such as when stepping through large arrays that cross a 16M
16638     boundary.  This option is enabled by default when targeting Power6
16639     and disabled otherwise.
16640
16641`-mfused-madd'
16642`-mno-fused-madd'
16643     Generate code that uses (does not use) the floating-point multiply
16644     and accumulate instructions.  These instructions are generated by
16645     default if hardware floating point is used.  The machine-dependent
16646     `-mfused-madd' option is now mapped to the machine-independent
16647     `-ffp-contract=fast' option, and `-mno-fused-madd' is mapped to
16648     `-ffp-contract=off'.
16649
16650`-mmulhw'
16651`-mno-mulhw'
16652     Generate code that uses (does not use) the half-word multiply and
16653     multiply-accumulate instructions on the IBM 405, 440, 464 and 476
16654     processors.  These instructions are generated by default when
16655     targeting those processors.
16656
16657`-mdlmzb'
16658`-mno-dlmzb'
16659     Generate code that uses (does not use) the string-search `dlmzb'
16660     instruction on the IBM 405, 440, 464 and 476 processors.  This
16661     instruction is generated by default when targeting those
16662     processors.
16663
16664`-mno-bit-align'
16665`-mbit-align'
16666     On System V.4 and embedded PowerPC systems do not (do) force
16667     structures and unions that contain bit-fields to be aligned to the
16668     base type of the bit-field.
16669
16670     For example, by default a structure containing nothing but 8
16671     `unsigned' bit-fields of length 1 is aligned to a 4-byte boundary
16672     and has a size of 4 bytes.  By using `-mno-bit-align', the
16673     structure is aligned to a 1-byte boundary and is 1 byte in size.
16674
16675`-mno-strict-align'
16676`-mstrict-align'
16677     On System V.4 and embedded PowerPC systems do not (do) assume that
16678     unaligned memory references are handled by the system.
16679
16680`-mrelocatable'
16681`-mno-relocatable'
16682     Generate code that allows (does not allow) a static executable to
16683     be relocated to a different address at run time.  A simple embedded
16684     PowerPC system loader should relocate the entire contents of
16685     `.got2' and 4-byte locations listed in the `.fixup' section, a
16686     table of 32-bit addresses generated by this option.  For this to
16687     work, all objects linked together must be compiled with
16688     `-mrelocatable' or `-mrelocatable-lib'.  `-mrelocatable' code
16689     aligns the stack to an 8-byte boundary.
16690
16691`-mrelocatable-lib'
16692`-mno-relocatable-lib'
16693     Like `-mrelocatable', `-mrelocatable-lib' generates a `.fixup'
16694     section to allow static executables to be relocated at run time,
16695     but `-mrelocatable-lib' does not use the smaller stack alignment
16696     of `-mrelocatable'.  Objects compiled with `-mrelocatable-lib' may
16697     be linked with objects compiled with any combination of the
16698     `-mrelocatable' options.
16699
16700`-mno-toc'
16701`-mtoc'
16702     On System V.4 and embedded PowerPC systems do not (do) assume that
16703     register 2 contains a pointer to a global area pointing to the
16704     addresses used in the program.
16705
16706`-mlittle'
16707`-mlittle-endian'
16708     On System V.4 and embedded PowerPC systems compile code for the
16709     processor in little-endian mode.  The `-mlittle-endian' option is
16710     the same as `-mlittle'.
16711
16712`-mbig'
16713`-mbig-endian'
16714     On System V.4 and embedded PowerPC systems compile code for the
16715     processor in big-endian mode.  The `-mbig-endian' option is the
16716     same as `-mbig'.
16717
16718`-mdynamic-no-pic'
16719     On Darwin and Mac OS X systems, compile code so that it is not
16720     relocatable, but that its external references are relocatable.  The
16721     resulting code is suitable for applications, but not shared
16722     libraries.
16723
16724`-msingle-pic-base'
16725     Treat the register used for PIC addressing as read-only, rather
16726     than loading it in the prologue for each function.  The runtime
16727     system is responsible for initializing this register with an
16728     appropriate value before execution begins.
16729
16730`-mprioritize-restricted-insns=PRIORITY'
16731     This option controls the priority that is assigned to
16732     dispatch-slot restricted instructions during the second scheduling
16733     pass.  The argument PRIORITY takes the value `0', `1', or `2' to
16734     assign no, highest, or second-highest (respectively) priority to
16735     dispatch-slot restricted instructions.
16736
16737`-msched-costly-dep=DEPENDENCE_TYPE'
16738     This option controls which dependences are considered costly by
16739     the target during instruction scheduling.  The argument
16740     DEPENDENCE_TYPE takes one of the following values:
16741
16742    `no'
16743          No dependence is costly.
16744
16745    `all'
16746          All dependences are costly.
16747
16748    `true_store_to_load'
16749          A true dependence from store to load is costly.
16750
16751    `store_to_load'
16752          Any dependence from store to load is costly.
16753
16754    NUMBER
16755          Any dependence for which the latency is greater than or equal
16756          to NUMBER is costly.
16757
16758`-minsert-sched-nops=SCHEME'
16759     This option controls which NOP insertion scheme is used during the
16760     second scheduling pass.  The argument SCHEME takes one of the
16761     following values:
16762
16763    `no'
16764          Don't insert NOPs.
16765
16766    `pad'
16767          Pad with NOPs any dispatch group that has vacant issue slots,
16768          according to the scheduler's grouping.
16769
16770    `regroup_exact'
16771          Insert NOPs to force costly dependent insns into separate
16772          groups.  Insert exactly as many NOPs as needed to force an
16773          insn to a new group, according to the estimated processor
16774          grouping.
16775
16776    NUMBER
16777          Insert NOPs to force costly dependent insns into separate
16778          groups.  Insert NUMBER NOPs to force an insn to a new group.
16779
16780`-mcall-sysv'
16781     On System V.4 and embedded PowerPC systems compile code using
16782     calling conventions that adhere to the March 1995 draft of the
16783     System V Application Binary Interface, PowerPC processor
16784     supplement.  This is the default unless you configured GCC using
16785     `powerpc-*-eabiaix'.
16786
16787`-mcall-sysv-eabi'
16788`-mcall-eabi'
16789     Specify both `-mcall-sysv' and `-meabi' options.
16790
16791`-mcall-sysv-noeabi'
16792     Specify both `-mcall-sysv' and `-mno-eabi' options.
16793
16794`-mcall-aixdesc'
16795     On System V.4 and embedded PowerPC systems compile code for the AIX
16796     operating system.
16797
16798`-mcall-linux'
16799     On System V.4 and embedded PowerPC systems compile code for the
16800     Linux-based GNU system.
16801
16802`-mcall-freebsd'
16803     On System V.4 and embedded PowerPC systems compile code for the
16804     FreeBSD operating system.
16805
16806`-mcall-netbsd'
16807     On System V.4 and embedded PowerPC systems compile code for the
16808     NetBSD operating system.
16809
16810`-mcall-openbsd'
16811     On System V.4 and embedded PowerPC systems compile code for the
16812     OpenBSD operating system.
16813
16814`-maix-struct-return'
16815     Return all structures in memory (as specified by the AIX ABI).
16816
16817`-msvr4-struct-return'
16818     Return structures smaller than 8 bytes in registers (as specified
16819     by the SVR4 ABI).
16820
16821`-mabi=ABI-TYPE'
16822     Extend the current ABI with a particular extension, or remove such
16823     extension.  Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE,
16824     IBMLONGDOUBLE, IEEELONGDOUBLE, ELFV1, ELFV2.
16825
16826`-mabi=spe'
16827     Extend the current ABI with SPE ABI extensions.  This does not
16828     change the default ABI, instead it adds the SPE ABI extensions to
16829     the current ABI.
16830
16831`-mabi=no-spe'
16832     Disable Book-E SPE ABI extensions for the current ABI.
16833
16834`-mabi=ibmlongdouble'
16835     Change the current ABI to use IBM extended-precision long double.
16836     This is a PowerPC 32-bit SYSV ABI option.
16837
16838`-mabi=ieeelongdouble'
16839     Change the current ABI to use IEEE extended-precision long double.
16840     This is a PowerPC 32-bit Linux ABI option.
16841
16842`-mabi=elfv1'
16843     Change the current ABI to use the ELFv1 ABI.  This is the default
16844     ABI for big-endian PowerPC 64-bit Linux.  Overriding the default
16845     ABI requires special system support and is likely to fail in
16846     spectacular ways.
16847
16848`-mabi=elfv2'
16849     Change the current ABI to use the ELFv2 ABI.  This is the default
16850     ABI for little-endian PowerPC 64-bit Linux.  Overriding the
16851     default ABI requires special system support and is likely to fail
16852     in spectacular ways.
16853
16854`-mprototype'
16855`-mno-prototype'
16856     On System V.4 and embedded PowerPC systems assume that all calls to
16857     variable argument functions are properly prototyped.  Otherwise,
16858     the compiler must insert an instruction before every
16859     non-prototyped call to set or clear bit 6 of the condition code
16860     register (CR) to indicate whether floating-point values are passed
16861     in the floating-point registers in case the function takes
16862     variable arguments.  With `-mprototype', only calls to prototyped
16863     variable argument functions set or clear the bit.
16864
16865`-msim'
16866     On embedded PowerPC systems, assume that the startup module is
16867     called `sim-crt0.o' and that the standard C libraries are
16868     `libsim.a' and `libc.a'.  This is the default for
16869     `powerpc-*-eabisim' configurations.
16870
16871`-mmvme'
16872     On embedded PowerPC systems, assume that the startup module is
16873     called `crt0.o' and the standard C libraries are `libmvme.a' and
16874     `libc.a'.
16875
16876`-mads'
16877     On embedded PowerPC systems, assume that the startup module is
16878     called `crt0.o' and the standard C libraries are `libads.a' and
16879     `libc.a'.
16880
16881`-myellowknife'
16882     On embedded PowerPC systems, assume that the startup module is
16883     called `crt0.o' and the standard C libraries are `libyk.a' and
16884     `libc.a'.
16885
16886`-mvxworks'
16887     On System V.4 and embedded PowerPC systems, specify that you are
16888     compiling for a VxWorks system.
16889
16890`-memb'
16891     On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
16892     header to indicate that `eabi' extended relocations are used.
16893
16894`-meabi'
16895`-mno-eabi'
16896     On System V.4 and embedded PowerPC systems do (do not) adhere to
16897     the Embedded Applications Binary Interface (EABI), which is a set
16898     of modifications to the System V.4 specifications.  Selecting
16899     `-meabi' means that the stack is aligned to an 8-byte boundary, a
16900     function `__eabi' is called from `main' to set up the EABI
16901     environment, and the `-msdata' option can use both `r2' and `r13'
16902     to point to two separate small data areas.  Selecting `-mno-eabi'
16903     means that the stack is aligned to a 16-byte boundary, no EABI
16904     initialization function is called from `main', and the `-msdata'
16905     option only uses `r13' to point to a single small data area.  The
16906     `-meabi' option is on by default if you configured GCC using one
16907     of the `powerpc*-*-eabi*' options.
16908
16909`-msdata=eabi'
16910     On System V.4 and embedded PowerPC systems, put small initialized
16911     `const' global and static data in the `.sdata2' section, which is
16912     pointed to by register `r2'.  Put small initialized non-`const'
16913     global and static data in the `.sdata' section, which is pointed
16914     to by register `r13'.  Put small uninitialized global and static
16915     data in the `.sbss' section, which is adjacent to the `.sdata'
16916     section.  The `-msdata=eabi' option is incompatible with the
16917     `-mrelocatable' option.  The `-msdata=eabi' option also sets the
16918     `-memb' option.
16919
16920`-msdata=sysv'
16921     On System V.4 and embedded PowerPC systems, put small global and
16922     static data in the `.sdata' section, which is pointed to by
16923     register `r13'.  Put small uninitialized global and static data in
16924     the `.sbss' section, which is adjacent to the `.sdata' section.
16925     The `-msdata=sysv' option is incompatible with the `-mrelocatable'
16926     option.
16927
16928`-msdata=default'
16929`-msdata'
16930     On System V.4 and embedded PowerPC systems, if `-meabi' is used,
16931     compile code the same as `-msdata=eabi', otherwise compile code the
16932     same as `-msdata=sysv'.
16933
16934`-msdata=data'
16935     On System V.4 and embedded PowerPC systems, put small global data
16936     in the `.sdata' section.  Put small uninitialized global data in
16937     the `.sbss' section.  Do not use register `r13' to address small
16938     data however.  This is the default behavior unless other `-msdata'
16939     options are used.
16940
16941`-msdata=none'
16942`-mno-sdata'
16943     On embedded PowerPC systems, put all initialized global and static
16944     data in the `.data' section, and all uninitialized data in the
16945     `.bss' section.
16946
16947`-mblock-move-inline-limit=NUM'
16948     Inline all block moves (such as calls to `memcpy' or structure
16949     copies) less than or equal to NUM bytes.  The minimum value for
16950     NUM is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.
16951     The default value is target-specific.
16952
16953`-G NUM'
16954     On embedded PowerPC systems, put global and static items less than
16955     or equal to NUM bytes into the small data or BSS sections instead
16956     of the normal data or BSS section.  By default, NUM is 8.  The `-G
16957     NUM' switch is also passed to the linker.  All modules should be
16958     compiled with the same `-G NUM' value.
16959
16960`-mregnames'
16961`-mno-regnames'
16962     On System V.4 and embedded PowerPC systems do (do not) emit
16963     register names in the assembly language output using symbolic
16964     forms.
16965
16966`-mlongcall'
16967`-mno-longcall'
16968     By default assume that all calls are far away so that a longer and
16969     more expensive calling sequence is required.  This is required for
16970     calls farther than 32 megabytes (33,554,432 bytes) from the
16971     current location.  A short call is generated if the compiler knows
16972     the call cannot be that far away.  This setting can be overridden
16973     by the `shortcall' function attribute, or by `#pragma longcall(0)'.
16974
16975     Some linkers are capable of detecting out-of-range calls and
16976     generating glue code on the fly.  On these systems, long calls are
16977     unnecessary and generate slower code.  As of this writing, the AIX
16978     linker can do this, as can the GNU linker for PowerPC/64.  It is
16979     planned to add this feature to the GNU linker for 32-bit PowerPC
16980     systems as well.
16981
16982     On Darwin/PPC systems, `#pragma longcall' generates `jbsr callee,
16983     L42', plus a "branch island" (glue code).  The two target
16984     addresses represent the callee and the branch island.  The
16985     Darwin/PPC linker prefers the first address and generates a `bl
16986     callee' if the PPC `bl' instruction reaches the callee directly;
16987     otherwise, the linker generates `bl L42' to call the branch
16988     island.  The branch island is appended to the body of the calling
16989     function; it computes the full 32-bit address of the callee and
16990     jumps to it.
16991
16992     On Mach-O (Darwin) systems, this option directs the compiler emit
16993     to the glue for every direct call, and the Darwin linker decides
16994     whether to use or discard it.
16995
16996     In the future, GCC may ignore all longcall specifications when the
16997     linker is known to generate glue.
16998
16999`-mtls-markers'
17000`-mno-tls-markers'
17001     Mark (do not mark) calls to `__tls_get_addr' with a relocation
17002     specifying the function argument.  The relocation allows the
17003     linker to reliably associate function call with argument setup
17004     instructions for TLS optimization, which in turn allows GCC to
17005     better schedule the sequence.
17006
17007`-pthread'
17008     Adds support for multithreading with the "pthreads" library.  This
17009     option sets flags for both the preprocessor and linker.
17010
17011`-mrecip'
17012`-mno-recip'
17013     This option enables use of the reciprocal estimate and reciprocal
17014     square root estimate instructions with additional Newton-Raphson
17015     steps to increase precision instead of doing a divide or square
17016     root and divide for floating-point arguments.  You should use the
17017     `-ffast-math' option when using `-mrecip' (or at least
17018     `-funsafe-math-optimizations', `-finite-math-only',
17019     `-freciprocal-math' and `-fno-trapping-math').  Note that while
17020     the throughput of the sequence is generally higher than the
17021     throughput of the non-reciprocal instruction, the precision of the
17022     sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0
17023     equals 0.99999994) for reciprocal square roots.
17024
17025`-mrecip=OPT'
17026     This option controls which reciprocal estimate instructions may be
17027     used.  OPT is a comma-separated list of options, which may be
17028     preceded by a `!' to invert the option: `all': enable all estimate
17029     instructions, `default': enable the default instructions,
17030     equivalent to `-mrecip', `none': disable all estimate
17031     instructions, equivalent to `-mno-recip'; `div': enable the
17032     reciprocal approximation instructions for both single and double
17033     precision; `divf': enable the single-precision reciprocal
17034     approximation instructions; `divd': enable the double-precision
17035     reciprocal approximation instructions; `rsqrt': enable the
17036     reciprocal square root approximation instructions for both single
17037     and double precision; `rsqrtf': enable the single-precision
17038     reciprocal square root approximation instructions; `rsqrtd':
17039     enable the double-precision reciprocal square root approximation
17040     instructions;
17041
17042     So, for example, `-mrecip=all,!rsqrtd' enables all of the
17043     reciprocal estimate instructions, except for the `FRSQRTE',
17044     `XSRSQRTEDP', and `XVRSQRTEDP' instructions which handle the
17045     double-precision reciprocal square root calculations.
17046
17047`-mrecip-precision'
17048`-mno-recip-precision'
17049     Assume (do not assume) that the reciprocal estimate instructions
17050     provide higher-precision estimates than is mandated by the PowerPC
17051     ABI.  Selecting `-mcpu=power6', `-mcpu=power7' or `-mcpu=power8'
17052     automatically selects `-mrecip-precision'.  The double-precision
17053     square root estimate instructions are not generated by default on
17054     low-precision machines, since they do not provide an estimate that
17055     converges after three steps.
17056
17057`-mveclibabi=TYPE'
17058     Specifies the ABI type to use for vectorizing intrinsics using an
17059     external library.  The only type supported at present is `mass',
17060     which specifies to use IBM's Mathematical Acceleration Subsystem
17061     (MASS) libraries for vectorizing intrinsics using external
17062     libraries.  GCC currently emits calls to `acosd2', `acosf4',
17063     `acoshd2', `acoshf4', `asind2', `asinf4', `asinhd2', `asinhf4',
17064     `atan2d2', `atan2f4', `atand2', `atanf4', `atanhd2', `atanhf4',
17065     `cbrtd2', `cbrtf4', `cosd2', `cosf4', `coshd2', `coshf4',
17066     `erfcd2', `erfcf4', `erfd2', `erff4', `exp2d2', `exp2f4', `expd2',
17067     `expf4', `expm1d2', `expm1f4', `hypotd2', `hypotf4', `lgammad2',
17068     `lgammaf4', `log10d2', `log10f4', `log1pd2', `log1pf4', `log2d2',
17069     `log2f4', `logd2', `logf4', `powd2', `powf4', `sind2', `sinf4',
17070     `sinhd2', `sinhf4', `sqrtd2', `sqrtf4', `tand2', `tanf4',
17071     `tanhd2', and `tanhf4' when generating code for power7.  Both
17072     `-ftree-vectorize' and `-funsafe-math-optimizations' must also be
17073     enabled.  The MASS libraries must be specified at link time.
17074
17075`-mfriz'
17076`-mno-friz'
17077     Generate (do not generate) the `friz' instruction when the
17078     `-funsafe-math-optimizations' option is used to optimize rounding
17079     of floating-point values to 64-bit integer and back to floating
17080     point.  The `friz' instruction does not return the same value if
17081     the floating-point number is too large to fit in an integer.
17082
17083`-mpointers-to-nested-functions'
17084`-mno-pointers-to-nested-functions'
17085     Generate (do not generate) code to load up the static chain
17086     register (R11) when calling through a pointer on AIX and 64-bit
17087     Linux systems where a function pointer points to a 3-word
17088     descriptor giving the function address, TOC value to be loaded in
17089     register R2, and static chain value to be loaded in register R11.
17090     The `-mpointers-to-nested-functions' is on by default.  You cannot
17091     call through pointers to nested functions or pointers to functions
17092     compiled in other languages that use the static chain if you use
17093     the `-mno-pointers-to-nested-functions'.
17094
17095`-msave-toc-indirect'
17096`-mno-save-toc-indirect'
17097     Generate (do not generate) code to save the TOC value in the
17098     reserved stack location in the function prologue if the function
17099     calls through a pointer on AIX and 64-bit Linux systems.  If the
17100     TOC value is not saved in the prologue, it is saved just before
17101     the call through the pointer.  The `-mno-save-toc-indirect' option
17102     is the default.
17103
17104`-mcompat-align-parm'
17105`-mno-compat-align-parm'
17106     Generate (do not generate) code to pass structure parameters with a
17107     maximum alignment of 64 bits, for compatibility with older versions
17108     of GCC.
17109
17110     Older versions of GCC (prior to 4.9.0) incorrectly did not align a
17111     structure parameter on a 128-bit boundary when that structure
17112     contained a member requiring 128-bit alignment.  This is corrected
17113     in more recent versions of GCC.  This option may be used to
17114     generate code that is compatible with functions compiled with
17115     older versions of GCC.
17116
17117     In this version of the compiler, the `-mcompat-align-parm' is the
17118     default, except when using the Linux ELFv2 ABI.
17119
17120
17121File: gcc.info,  Node: RX Options,  Next: S/390 and zSeries Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options
17122
171233.17.35 RX Options
17124------------------
17125
17126These command-line options are defined for RX targets:
17127
17128`-m64bit-doubles'
17129`-m32bit-doubles'
17130     Make the `double' data type be 64 bits (`-m64bit-doubles') or 32
17131     bits (`-m32bit-doubles') in size.  The default is
17132     `-m32bit-doubles'.  _Note_ RX floating-point hardware only works
17133     on 32-bit values, which is why the default is `-m32bit-doubles'.
17134
17135`-fpu'
17136`-nofpu'
17137     Enables (`-fpu') or disables (`-nofpu') the use of RX
17138     floating-point hardware.  The default is enabled for the RX600
17139     series and disabled for the RX200 series.
17140
17141     Floating-point instructions are only generated for 32-bit
17142     floating-point values, however, so the FPU hardware is not used
17143     for doubles if the `-m64bit-doubles' option is used.
17144
17145     _Note_ If the `-fpu' option is enabled then
17146     `-funsafe-math-optimizations' is also enabled automatically.  This
17147     is because the RX FPU instructions are themselves unsafe.
17148
17149`-mcpu=NAME'
17150     Selects the type of RX CPU to be targeted.  Currently three types
17151     are supported, the generic RX600 and RX200 series hardware and the
17152     specific RX610 CPU.  The default is RX600.
17153
17154     The only difference between RX600 and RX610 is that the RX610 does
17155     not support the `MVTIPL' instruction.
17156
17157     The RX200 series does not have a hardware floating-point unit and
17158     so `-nofpu' is enabled by default when this type is selected.
17159
17160`-mbig-endian-data'
17161`-mlittle-endian-data'
17162     Store data (but not code) in the big-endian format.  The default is
17163     `-mlittle-endian-data', i.e. to store data in the little-endian
17164     format.
17165
17166`-msmall-data-limit=N'
17167     Specifies the maximum size in bytes of global and static variables
17168     which can be placed into the small data area.  Using the small data
17169     area can lead to smaller and faster code, but the size of area is
17170     limited and it is up to the programmer to ensure that the area does
17171     not overflow.  Also when the small data area is used one of the
17172     RX's registers (usually `r13') is reserved for use pointing to this
17173     area, so it is no longer available for use by the compiler.  This
17174     could result in slower and/or larger code if variables are pushed
17175     onto the stack instead of being held in this register.
17176
17177     Note, common variables (variables that have not been initialized)
17178     and constants are not placed into the small data area as they are
17179     assigned to other sections in the output executable.
17180
17181     The default value is zero, which disables this feature.  Note, this
17182     feature is not enabled by default with higher optimization levels
17183     (`-O2' etc) because of the potentially detrimental effects of
17184     reserving a register.  It is up to the programmer to experiment and
17185     discover whether this feature is of benefit to their program.  See
17186     the description of the `-mpid' option for a description of how the
17187     actual register to hold the small data area pointer is chosen.
17188
17189`-msim'
17190`-mno-sim'
17191     Use the simulator runtime.  The default is to use the libgloss
17192     board-specific runtime.
17193
17194`-mas100-syntax'
17195`-mno-as100-syntax'
17196     When generating assembler output use a syntax that is compatible
17197     with Renesas's AS100 assembler.  This syntax can also be handled
17198     by the GAS assembler, but it has some restrictions so it is not
17199     generated by default.
17200
17201`-mmax-constant-size=N'
17202     Specifies the maximum size, in bytes, of a constant that can be
17203     used as an operand in a RX instruction.  Although the RX
17204     instruction set does allow constants of up to 4 bytes in length to
17205     be used in instructions, a longer value equates to a longer
17206     instruction.  Thus in some circumstances it can be beneficial to
17207     restrict the size of constants that are used in instructions.
17208     Constants that are too big are instead placed into a constant pool
17209     and referenced via register indirection.
17210
17211     The value N can be between 0 and 4.  A value of 0 (the default) or
17212     4 means that constants of any size are allowed.
17213
17214`-mrelax'
17215     Enable linker relaxation.  Linker relaxation is a process whereby
17216     the linker attempts to reduce the size of a program by finding
17217     shorter versions of various instructions.  Disabled by default.
17218
17219`-mint-register=N'
17220     Specify the number of registers to reserve for fast interrupt
17221     handler functions.  The value N can be between 0 and 4.  A value
17222     of 1 means that register `r13' is reserved for the exclusive use
17223     of fast interrupt handlers.  A value of 2 reserves `r13' and
17224     `r12'.  A value of 3 reserves `r13', `r12' and `r11', and a value
17225     of 4 reserves `r13' through `r10'.  A value of 0, the default,
17226     does not reserve any registers.
17227
17228`-msave-acc-in-interrupts'
17229     Specifies that interrupt handler functions should preserve the
17230     accumulator register.  This is only necessary if normal code might
17231     use the accumulator register, for example because it performs
17232     64-bit multiplications.  The default is to ignore the accumulator
17233     as this makes the interrupt handlers faster.
17234
17235`-mpid'
17236`-mno-pid'
17237     Enables the generation of position independent data.  When enabled
17238     any access to constant data is done via an offset from a base
17239     address held in a register.  This allows the location of constant
17240     data to be determined at run time without requiring the executable
17241     to be relocated, which is a benefit to embedded applications with
17242     tight memory constraints.  Data that can be modified is not
17243     affected by this option.
17244
17245     Note, using this feature reserves a register, usually `r13', for
17246     the constant data base address.  This can result in slower and/or
17247     larger code, especially in complicated functions.
17248
17249     The actual register chosen to hold the constant data base address
17250     depends upon whether the `-msmall-data-limit' and/or the
17251     `-mint-register' command-line options are enabled.  Starting with
17252     register `r13' and proceeding downwards, registers are allocated
17253     first to satisfy the requirements of `-mint-register', then
17254     `-mpid' and finally `-msmall-data-limit'.  Thus it is possible for
17255     the small data area register to be `r8' if both `-mint-register=4'
17256     and `-mpid' are specified on the command line.
17257
17258     By default this feature is not enabled.  The default can be
17259     restored via the `-mno-pid' command-line option.
17260
17261`-mno-warn-multiple-fast-interrupts'
17262`-mwarn-multiple-fast-interrupts'
17263     Prevents GCC from issuing a warning message if it finds more than
17264     one fast interrupt handler when it is compiling a file.  The
17265     default is to issue a warning for each extra fast interrupt
17266     handler found, as the RX only supports one such interrupt.
17267
17268
17269 _Note:_ The generic GCC command-line option `-ffixed-REG' has special
17270significance to the RX port when used with the `interrupt' function
17271attribute.  This attribute indicates a function intended to process
17272fast interrupts.  GCC ensures that it only uses the registers `r10',
17273`r11', `r12' and/or `r13' and only provided that the normal use of the
17274corresponding registers have been restricted via the `-ffixed-REG' or
17275`-mint-register' command-line options.
17276
17277
17278File: gcc.info,  Node: S/390 and zSeries Options,  Next: Score Options,  Prev: RX Options,  Up: Submodel Options
17279
172803.17.36 S/390 and zSeries Options
17281---------------------------------
17282
17283These are the `-m' options defined for the S/390 and zSeries
17284architecture.
17285
17286`-mhard-float'
17287`-msoft-float'
17288     Use (do not use) the hardware floating-point instructions and
17289     registers for floating-point operations.  When `-msoft-float' is
17290     specified, functions in `libgcc.a' are used to perform
17291     floating-point operations.  When `-mhard-float' is specified, the
17292     compiler generates IEEE floating-point instructions.  This is the
17293     default.
17294
17295`-mhard-dfp'
17296`-mno-hard-dfp'
17297     Use (do not use) the hardware decimal-floating-point instructions
17298     for decimal-floating-point operations.  When `-mno-hard-dfp' is
17299     specified, functions in `libgcc.a' are used to perform
17300     decimal-floating-point operations.  When `-mhard-dfp' is
17301     specified, the compiler generates decimal-floating-point hardware
17302     instructions.  This is the default for `-march=z9-ec' or higher.
17303
17304`-mlong-double-64'
17305`-mlong-double-128'
17306     These switches control the size of `long double' type. A size of
17307     64 bits makes the `long double' type equivalent to the `double'
17308     type. This is the default.
17309
17310`-mbackchain'
17311`-mno-backchain'
17312     Store (do not store) the address of the caller's frame as
17313     backchain pointer into the callee's stack frame.  A backchain may
17314     be needed to allow debugging using tools that do not understand
17315     DWARF 2 call frame information.  When `-mno-packed-stack' is in
17316     effect, the backchain pointer is stored at the bottom of the stack
17317     frame; when `-mpacked-stack' is in effect, the backchain is placed
17318     into the topmost word of the 96/160 byte register save area.
17319
17320     In general, code compiled with `-mbackchain' is call-compatible
17321     with code compiled with `-mmo-backchain'; however, use of the
17322     backchain for debugging purposes usually requires that the whole
17323     binary is built with `-mbackchain'.  Note that the combination of
17324     `-mbackchain', `-mpacked-stack' and `-mhard-float' is not
17325     supported.  In order to build a linux kernel use `-msoft-float'.
17326
17327     The default is to not maintain the backchain.
17328
17329`-mpacked-stack'
17330`-mno-packed-stack'
17331     Use (do not use) the packed stack layout.  When
17332     `-mno-packed-stack' is specified, the compiler uses the all fields
17333     of the 96/160 byte register save area only for their default
17334     purpose; unused fields still take up stack space.  When
17335     `-mpacked-stack' is specified, register save slots are densely
17336     packed at the top of the register save area; unused space is
17337     reused for other purposes, allowing for more efficient use of the
17338     available stack space.  However, when `-mbackchain' is also in
17339     effect, the topmost word of the save area is always used to store
17340     the backchain, and the return address register is always saved two
17341     words below the backchain.
17342
17343     As long as the stack frame backchain is not used, code generated
17344     with `-mpacked-stack' is call-compatible with code generated with
17345     `-mno-packed-stack'.  Note that some non-FSF releases of GCC 2.95
17346     for S/390 or zSeries generated code that uses the stack frame
17347     backchain at run time, not just for debugging purposes.  Such code
17348     is not call-compatible with code compiled with `-mpacked-stack'.
17349     Also, note that the combination of `-mbackchain', `-mpacked-stack'
17350     and `-mhard-float' is not supported.  In order to build a linux
17351     kernel use `-msoft-float'.
17352
17353     The default is to not use the packed stack layout.
17354
17355`-msmall-exec'
17356`-mno-small-exec'
17357     Generate (or do not generate) code using the `bras' instruction to
17358     do subroutine calls.  This only works reliably if the total
17359     executable size does not exceed 64k.  The default is to use the
17360     `basr' instruction instead, which does not have this limitation.
17361
17362`-m64'
17363`-m31'
17364     When `-m31' is specified, generate code compliant to the GNU/Linux
17365     for S/390 ABI.  When `-m64' is specified, generate code compliant
17366     to the GNU/Linux for zSeries ABI.  This allows GCC in particular
17367     to generate 64-bit instructions.  For the `s390' targets, the
17368     default is `-m31', while the `s390x' targets default to `-m64'.
17369
17370`-mzarch'
17371`-mesa'
17372     When `-mzarch' is specified, generate code using the instructions
17373     available on z/Architecture.  When `-mesa' is specified, generate
17374     code using the instructions available on ESA/390.  Note that
17375     `-mesa' is not possible with `-m64'.  When generating code
17376     compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'.
17377     When generating code compliant to the GNU/Linux for zSeries ABI,
17378     the default is `-mzarch'.
17379
17380`-mmvcle'
17381`-mno-mvcle'
17382     Generate (or do not generate) code using the `mvcle' instruction
17383     to perform block moves.  When `-mno-mvcle' is specified, use a
17384     `mvc' loop instead.  This is the default unless optimizing for
17385     size.
17386
17387`-mdebug'
17388`-mno-debug'
17389     Print (or do not print) additional debug information when
17390     compiling.  The default is to not print debug information.
17391
17392`-march=CPU-TYPE'
17393     Generate code that runs on CPU-TYPE, which is the name of a system
17394     representing a certain processor type.  Possible values for
17395     CPU-TYPE are `g5', `g6', `z900', `z990', `z9-109', `z9-ec', `z10',
17396     `z196', and `zEC12'.  When generating code using the instructions
17397     available on z/Architecture, the default is `-march=z900'.
17398     Otherwise, the default is `-march=g5'.
17399
17400`-mtune=CPU-TYPE'
17401     Tune to CPU-TYPE everything applicable about the generated code,
17402     except for the ABI and the set of available instructions.  The
17403     list of CPU-TYPE values is the same as for `-march'.  The default
17404     is the value used for `-march'.
17405
17406`-mtpf-trace'
17407`-mno-tpf-trace'
17408     Generate code that adds (does not add) in TPF OS specific branches
17409     to trace routines in the operating system.  This option is off by
17410     default, even when compiling for the TPF OS.
17411
17412`-mfused-madd'
17413`-mno-fused-madd'
17414     Generate code that uses (does not use) the floating-point multiply
17415     and accumulate instructions.  These instructions are generated by
17416     default if hardware floating point is used.
17417
17418`-mwarn-framesize=FRAMESIZE'
17419     Emit a warning if the current function exceeds the given frame
17420     size.  Because this is a compile-time check it doesn't need to be
17421     a real problem when the program runs.  It is intended to identify
17422     functions that most probably cause a stack overflow.  It is useful
17423     to be used in an environment with limited stack size e.g. the
17424     linux kernel.
17425
17426`-mwarn-dynamicstack'
17427     Emit a warning if the function calls `alloca' or uses
17428     dynamically-sized arrays.  This is generally a bad idea with a
17429     limited stack size.
17430
17431`-mstack-guard=STACK-GUARD'
17432`-mstack-size=STACK-SIZE'
17433     If these options are provided the S/390 back end emits additional
17434     instructions in the function prologue that trigger a trap if the
17435     stack size is STACK-GUARD bytes above the STACK-SIZE (remember
17436     that the stack on S/390 grows downward).  If the STACK-GUARD
17437     option is omitted the smallest power of 2 larger than the frame
17438     size of the compiled function is chosen.  These options are
17439     intended to be used to help debugging stack overflow problems.
17440     The additionally emitted code causes only little overhead and
17441     hence can also be used in production-like systems without greater
17442     performance degradation.  The given values have to be exact powers
17443     of 2 and STACK-SIZE has to be greater than STACK-GUARD without
17444     exceeding 64k.  In order to be efficient the extra code makes the
17445     assumption that the stack starts at an address aligned to the
17446     value given by STACK-SIZE.  The STACK-GUARD option can only be
17447     used in conjunction with STACK-SIZE.
17448
17449`-mhotpatch=PRE-HALFWORDS,POST-HALFWORDS'
17450     If the hotpatch option is enabled, a "hot-patching" function
17451     prologue is generated for all functions in the compilation unit.
17452     The funtion label is prepended with the given number of two-byte
17453     NOP instructions (PRE-HALFWORDS, maximum 1000000).  After the
17454     label, 2 * POST-HALFWORDS bytes are appended, using the largest
17455     NOP like instructions the architecture allows (maximum 1000000).
17456
17457     If both arguments are zero, hotpatching is disabled.
17458
17459     This option can be overridden for individual functions with the
17460     `hotpatch' attribute.
17461
17462
17463File: gcc.info,  Node: Score Options,  Next: SH Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
17464
174653.17.37 Score Options
17466---------------------
17467
17468These options are defined for Score implementations:
17469
17470`-meb'
17471     Compile code for big-endian mode.  This is the default.
17472
17473`-mel'
17474     Compile code for little-endian mode.
17475
17476`-mnhwloop'
17477     Disable generation of `bcnz' instructions.
17478
17479`-muls'
17480     Enable generation of unaligned load and store instructions.
17481
17482`-mmac'
17483     Enable the use of multiply-accumulate instructions. Disabled by
17484     default.
17485
17486`-mscore5'
17487     Specify the SCORE5 as the target architecture.
17488
17489`-mscore5u'
17490     Specify the SCORE5U of the target architecture.
17491
17492`-mscore7'
17493     Specify the SCORE7 as the target architecture. This is the default.
17494
17495`-mscore7d'
17496     Specify the SCORE7D as the target architecture.
17497
17498
17499File: gcc.info,  Node: SH Options,  Next: Solaris 2 Options,  Prev: Score Options,  Up: Submodel Options
17500
175013.17.38 SH Options
17502------------------
17503
17504These `-m' options are defined for the SH implementations:
17505
17506`-m1'
17507     Generate code for the SH1.
17508
17509`-m2'
17510     Generate code for the SH2.
17511
17512`-m2e'
17513     Generate code for the SH2e.
17514
17515`-m2a-nofpu'
17516     Generate code for the SH2a without FPU, or for a SH2a-FPU in such
17517     a way that the floating-point unit is not used.
17518
17519`-m2a-single-only'
17520     Generate code for the SH2a-FPU, in such a way that no
17521     double-precision floating-point operations are used.
17522
17523`-m2a-single'
17524     Generate code for the SH2a-FPU assuming the floating-point unit is
17525     in single-precision mode by default.
17526
17527`-m2a'
17528     Generate code for the SH2a-FPU assuming the floating-point unit is
17529     in double-precision mode by default.
17530
17531`-m3'
17532     Generate code for the SH3.
17533
17534`-m3e'
17535     Generate code for the SH3e.
17536
17537`-m4-nofpu'
17538     Generate code for the SH4 without a floating-point unit.
17539
17540`-m4-single-only'
17541     Generate code for the SH4 with a floating-point unit that only
17542     supports single-precision arithmetic.
17543
17544`-m4-single'
17545     Generate code for the SH4 assuming the floating-point unit is in
17546     single-precision mode by default.
17547
17548`-m4'
17549     Generate code for the SH4.
17550
17551`-m4-100'
17552     Generate code for SH4-100.
17553
17554`-m4-100-nofpu'
17555     Generate code for SH4-100 in such a way that the floating-point
17556     unit is not used.
17557
17558`-m4-100-single'
17559     Generate code for SH4-100 assuming the floating-point unit is in
17560     single-precision mode by default.
17561
17562`-m4-100-single-only'
17563     Generate code for SH4-100 in such a way that no double-precision
17564     floating-point operations are used.
17565
17566`-m4-200'
17567     Generate code for SH4-200.
17568
17569`-m4-200-nofpu'
17570     Generate code for SH4-200 without in such a way that the
17571     floating-point unit is not used.
17572
17573`-m4-200-single'
17574     Generate code for SH4-200 assuming the floating-point unit is in
17575     single-precision mode by default.
17576
17577`-m4-200-single-only'
17578     Generate code for SH4-200 in such a way that no double-precision
17579     floating-point operations are used.
17580
17581`-m4-300'
17582     Generate code for SH4-300.
17583
17584`-m4-300-nofpu'
17585     Generate code for SH4-300 without in such a way that the
17586     floating-point unit is not used.
17587
17588`-m4-300-single'
17589     Generate code for SH4-300 in such a way that no double-precision
17590     floating-point operations are used.
17591
17592`-m4-300-single-only'
17593     Generate code for SH4-300 in such a way that no double-precision
17594     floating-point operations are used.
17595
17596`-m4-340'
17597     Generate code for SH4-340 (no MMU, no FPU).
17598
17599`-m4-500'
17600     Generate code for SH4-500 (no FPU).  Passes `-isa=sh4-nofpu' to the
17601     assembler.
17602
17603`-m4a-nofpu'
17604     Generate code for the SH4al-dsp, or for a SH4a in such a way that
17605     the floating-point unit is not used.
17606
17607`-m4a-single-only'
17608     Generate code for the SH4a, in such a way that no double-precision
17609     floating-point operations are used.
17610
17611`-m4a-single'
17612     Generate code for the SH4a assuming the floating-point unit is in
17613     single-precision mode by default.
17614
17615`-m4a'
17616     Generate code for the SH4a.
17617
17618`-m4al'
17619     Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to
17620     the assembler.  GCC doesn't generate any DSP instructions at the
17621     moment.
17622
17623`-m5-32media'
17624     Generate 32-bit code for SHmedia.
17625
17626`-m5-32media-nofpu'
17627     Generate 32-bit code for SHmedia in such a way that the
17628     floating-point unit is not used.
17629
17630`-m5-64media'
17631     Generate 64-bit code for SHmedia.
17632
17633`-m5-64media-nofpu'
17634     Generate 64-bit code for SHmedia in such a way that the
17635     floating-point unit is not used.
17636
17637`-m5-compact'
17638     Generate code for SHcompact.
17639
17640`-m5-compact-nofpu'
17641     Generate code for SHcompact in such a way that the floating-point
17642     unit is not used.
17643
17644`-mb'
17645     Compile code for the processor in big-endian mode.
17646
17647`-ml'
17648     Compile code for the processor in little-endian mode.
17649
17650`-mdalign'
17651     Align doubles at 64-bit boundaries.  Note that this changes the
17652     calling conventions, and thus some functions from the standard C
17653     library do not work unless you recompile it first with `-mdalign'.
17654
17655`-mrelax'
17656     Shorten some address references at link time, when possible; uses
17657     the linker option `-relax'.
17658
17659`-mbigtable'
17660     Use 32-bit offsets in `switch' tables.  The default is to use
17661     16-bit offsets.
17662
17663`-mbitops'
17664     Enable the use of bit manipulation instructions on SH2A.
17665
17666`-mfmovd'
17667     Enable the use of the instruction `fmovd'.  Check `-mdalign' for
17668     alignment constraints.
17669
17670`-mrenesas'
17671     Comply with the calling conventions defined by Renesas.
17672
17673`-mno-renesas'
17674     Comply with the calling conventions defined for GCC before the
17675     Renesas conventions were available.  This option is the default
17676     for all targets of the SH toolchain.
17677
17678`-mnomacsave'
17679     Mark the `MAC' register as call-clobbered, even if `-mrenesas' is
17680     given.
17681
17682`-mieee'
17683`-mno-ieee'
17684     Control the IEEE compliance of floating-point comparisons, which
17685     affects the handling of cases where the result of a comparison is
17686     unordered.  By default `-mieee' is implicitly enabled.  If
17687     `-ffinite-math-only' is enabled `-mno-ieee' is implicitly set,
17688     which results in faster floating-point greater-equal and
17689     less-equal comparisons.  The implcit settings can be overridden by
17690     specifying either `-mieee' or `-mno-ieee'.
17691
17692`-minline-ic_invalidate'
17693     Inline code to invalidate instruction cache entries after setting
17694     up nested function trampolines.  This option has no effect if
17695     `-musermode' is in effect and the selected code generation option
17696     (e.g. `-m4') does not allow the use of the `icbi' instruction.  If
17697     the selected code generation option does not allow the use of the
17698     `icbi' instruction, and `-musermode' is not in effect, the inlined
17699     code manipulates the instruction cache address array directly with
17700     an associative write.  This not only requires privileged mode at
17701     run time, but it also fails if the cache line had been mapped via
17702     the TLB and has become unmapped.
17703
17704`-misize'
17705     Dump instruction size and location in the assembly code.
17706
17707`-mpadstruct'
17708     This option is deprecated.  It pads structures to multiple of 4
17709     bytes, which is incompatible with the SH ABI.
17710
17711`-matomic-model=MODEL'
17712     Sets the model of atomic operations and additional parameters as a
17713     comma separated list.  For details on the atomic built-in
17714     functions see *note __atomic Builtins::.  The following models and
17715     parameters are supported:
17716
17717    `none'
17718          Disable compiler generated atomic sequences and emit library
17719          calls for atomic operations.  This is the default if the
17720          target is not `sh*-*-linux*'.
17721
17722    `soft-gusa'
17723          Generate GNU/Linux compatible gUSA software atomic sequences
17724          for the atomic built-in functions.  The generated atomic
17725          sequences require additional support from the
17726          interrupt/exception handling code of the system and are only
17727          suitable for SH3* and SH4* single-core systems.  This option
17728          is enabled by default when the target is `sh*-*-linux*' and
17729          SH3* or SH4*.  When the target is SH4A, this option will also
17730          partially utilize the hardware atomic instructions `movli.l'
17731          and `movco.l' to create more efficient code, unless `strict'
17732          is specified.
17733
17734    `soft-tcb'
17735          Generate software atomic sequences that use a variable in the
17736          thread control block.  This is a variation of the gUSA
17737          sequences which can also be used on SH1* and SH2* targets.
17738          The generated atomic sequences require additional support
17739          from the interrupt/exception handling code of the system and
17740          are only suitable for single-core systems.  When using this
17741          model, the `gbr-offset=' parameter has to be specified as
17742          well.
17743
17744    `soft-imask'
17745          Generate software atomic sequences that temporarily disable
17746          interrupts by setting `SR.IMASK = 1111'.  This model works
17747          only when the program runs in privileged mode and is only
17748          suitable for single-core systems.  Additional support from
17749          the interrupt/exception handling code of the system is not
17750          required.  This model is enabled by default when the target is
17751          `sh*-*-linux*' and SH1* or SH2*.
17752
17753    `hard-llcs'
17754          Generate hardware atomic sequences using the `movli.l' and
17755          `movco.l' instructions only.  This is only available on SH4A
17756          and is suitable for multi-core systems.  Since the hardware
17757          instructions support only 32 bit atomic variables access to 8
17758          or 16 bit variables is emulated with 32 bit accesses.  Code
17759          compiled with this option will also be compatible with other
17760          software atomic model interrupt/exception handling systems if
17761          executed on an SH4A system.  Additional support from the
17762          interrupt/exception handling code of the system is not
17763          required for this model.
17764
17765    `gbr-offset='
17766          This parameter specifies the offset in bytes of the variable
17767          in the thread control block structure that should be used by
17768          the generated atomic sequences when the `soft-tcb' model has
17769          been selected.  For other models this parameter is ignored.
17770          The specified value must be an integer multiple of four and
17771          in the range 0-1020.
17772
17773    `strict'
17774          This parameter prevents mixed usage of multiple atomic
17775          models, even though they would be compatible, and will make
17776          the compiler generate atomic sequences of the specified model
17777          only.
17778
17779
17780`-mtas'
17781     Generate the `tas.b' opcode for `__atomic_test_and_set'.  Notice
17782     that depending on the particular hardware and software
17783     configuration this can degrade overall performance due to the
17784     operand cache line flushes that are implied by the `tas.b'
17785     instruction.  On multi-core SH4A processors the `tas.b'
17786     instruction must be used with caution since it can result in data
17787     corruption for certain cache configurations.
17788
17789`-mprefergot'
17790     When generating position-independent code, emit function calls
17791     using the Global Offset Table instead of the Procedure Linkage
17792     Table.
17793
17794`-musermode'
17795`-mno-usermode'
17796     Don't allow (allow) the compiler generating privileged mode code.
17797     Specifying `-musermode' also implies `-mno-inline-ic_invalidate'
17798     if the inlined code would not work in user mode.  `-musermode' is
17799     the default when the target is `sh*-*-linux*'.  If the target is
17800     SH1* or SH2* `-musermode' has no effect, since there is no user
17801     mode.
17802
17803`-multcost=NUMBER'
17804     Set the cost to assume for a multiply insn.
17805
17806`-mdiv=STRATEGY'
17807     Set the division strategy to be used for integer division
17808     operations.  For SHmedia STRATEGY can be one of:
17809
17810    `fp'
17811          Performs the operation in floating point.  This has a very
17812          high latency, but needs only a few instructions, so it might
17813          be a good choice if your code has enough easily-exploitable
17814          ILP to allow the compiler to schedule the floating-point
17815          instructions together with other instructions.  Division by
17816          zero causes a floating-point exception.
17817
17818    `inv'
17819          Uses integer operations to calculate the inverse of the
17820          divisor, and then multiplies the dividend with the inverse.
17821          This strategy allows CSE and hoisting of the inverse
17822          calculation.  Division by zero calculates an unspecified
17823          result, but does not trap.
17824
17825    `inv:minlat'
17826          A variant of `inv' where, if no CSE or hoisting opportunities
17827          have been found, or if the entire operation has been hoisted
17828          to the same place, the last stages of the inverse calculation
17829          are intertwined with the final multiply to reduce the overall
17830          latency, at the expense of using a few more instructions, and
17831          thus offering fewer scheduling opportunities with other code.
17832
17833    `call'
17834          Calls a library function that usually implements the
17835          `inv:minlat' strategy.  This gives high code density for
17836          `m5-*media-nofpu' compilations.
17837
17838    `call2'
17839          Uses a different entry point of the same library function,
17840          where it assumes that a pointer to a lookup table has already
17841          been set up, which exposes the pointer load to CSE and code
17842          hoisting optimizations.
17843
17844    `inv:call'
17845    `inv:call2'
17846    `inv:fp'
17847          Use the `inv' algorithm for initial code generation, but if
17848          the code stays unoptimized, revert to the `call', `call2', or
17849          `fp' strategies, respectively.  Note that the
17850          potentially-trapping side effect of division by zero is
17851          carried by a separate instruction, so it is possible that all
17852          the integer instructions are hoisted out, but the marker for
17853          the side effect stays where it is.  A recombination to
17854          floating-point operations or a call is not possible in that
17855          case.
17856
17857    `inv20u'
17858    `inv20l'
17859          Variants of the `inv:minlat' strategy.  In the case that the
17860          inverse calculation is not separated from the multiply, they
17861          speed up division where the dividend fits into 20 bits (plus
17862          sign where applicable) by inserting a test to skip a number
17863          of operations in this case; this test slows down the case of
17864          larger dividends.  `inv20u' assumes the case of a such a
17865          small dividend to be unlikely, and `inv20l' assumes it to be
17866          likely.
17867
17868
17869     For targets other than SHmedia STRATEGY can be one of:
17870
17871    `call-div1'
17872          Calls a library function that uses the single-step division
17873          instruction `div1' to perform the operation.  Division by
17874          zero calculates an unspecified result and does not trap.
17875          This is the default except for SH4, SH2A and SHcompact.
17876
17877    `call-fp'
17878          Calls a library function that performs the operation in
17879          double precision floating point.  Division by zero causes a
17880          floating-point exception.  This is the default for SHcompact
17881          with FPU.  Specifying this for targets that do not have a
17882          double precision FPU will default to `call-div1'.
17883
17884    `call-table'
17885          Calls a library function that uses a lookup table for small
17886          divisors and the `div1' instruction with case distinction for
17887          larger divisors.  Division by zero calculates an unspecified
17888          result and does not trap.  This is the default for SH4.
17889          Specifying this for targets that do not have dynamic shift
17890          instructions will default to `call-div1'.
17891
17892
17893     When a division strategy has not been specified the default
17894     strategy will be selected based on the current target.  For SH2A
17895     the default strategy is to use the `divs' and `divu' instructions
17896     instead of library function calls.
17897
17898`-maccumulate-outgoing-args'
17899     Reserve space once for outgoing arguments in the function prologue
17900     rather than around each call.  Generally beneficial for
17901     performance and size.  Also needed for unwinding to avoid changing
17902     the stack frame around conditional code.
17903
17904`-mdivsi3_libfunc=NAME'
17905     Set the name of the library function used for 32-bit signed
17906     division to NAME.  This only affects the name used in the `call'
17907     and `inv:call' division strategies, and the compiler still expects
17908     the same sets of input/output/clobbered registers as if this
17909     option were not present.
17910
17911`-mfixed-range=REGISTER-RANGE'
17912     Generate code treating the given register range as fixed registers.
17913     A fixed register is one that the register allocator can not use.
17914     This is useful when compiling kernel code.  A register range is
17915     specified as two registers separated by a dash.  Multiple register
17916     ranges can be specified separated by a comma.
17917
17918`-mindexed-addressing'
17919     Enable the use of the indexed addressing mode for
17920     SHmedia32/SHcompact.  This is only safe if the hardware and/or OS
17921     implement 32-bit wrap-around semantics for the indexed addressing
17922     mode.  The architecture allows the implementation of processors
17923     with 64-bit MMU, which the OS could use to get 32-bit addressing,
17924     but since no current hardware implementation supports this or any
17925     other way to make the indexed addressing mode safe to use in the
17926     32-bit ABI, the default is `-mno-indexed-addressing'.
17927
17928`-mgettrcost=NUMBER'
17929     Set the cost assumed for the `gettr' instruction to NUMBER.  The
17930     default is 2 if `-mpt-fixed' is in effect, 100 otherwise.
17931
17932`-mpt-fixed'
17933     Assume `pt*' instructions won't trap.  This generally generates
17934     better-scheduled code, but is unsafe on current hardware.  The
17935     current architecture definition says that `ptabs' and `ptrel' trap
17936     when the target anded with 3 is 3.  This has the unintentional
17937     effect of making it unsafe to schedule these instructions before a
17938     branch, or hoist them out of a loop.  For example,
17939     `__do_global_ctors', a part of `libgcc' that runs constructors at
17940     program startup, calls functions in a list which is delimited by
17941     -1.  With the `-mpt-fixed' option, the `ptabs' is done before
17942     testing against -1.  That means that all the constructors run a
17943     bit more quickly, but when the loop comes to the end of the list,
17944     the program crashes because `ptabs' loads -1 into a target
17945     register.
17946
17947     Since this option is unsafe for any hardware implementing the
17948     current architecture specification, the default is
17949     `-mno-pt-fixed'.  Unless specified explicitly with `-mgettrcost',
17950     `-mno-pt-fixed' also implies `-mgettrcost=100'; this deters
17951     register allocation from using target registers for storing
17952     ordinary integers.
17953
17954`-minvalid-symbols'
17955     Assume symbols might be invalid.  Ordinary function symbols
17956     generated by the compiler are always valid to load with
17957     `movi'/`shori'/`ptabs' or `movi'/`shori'/`ptrel', but with
17958     assembler and/or linker tricks it is possible to generate symbols
17959     that cause `ptabs' or `ptrel' to trap.  This option is only
17960     meaningful when `-mno-pt-fixed' is in effect.  It prevents
17961     cross-basic-block CSE, hoisting and most scheduling of symbol
17962     loads.  The default is `-mno-invalid-symbols'.
17963
17964`-mbranch-cost=NUM'
17965     Assume NUM to be the cost for a branch instruction.  Higher numbers
17966     make the compiler try to generate more branch-free code if
17967     possible.  If not specified the value is selected depending on the
17968     processor type that is being compiled for.
17969
17970`-mzdcbranch'
17971`-mno-zdcbranch'
17972     Assume (do not assume) that zero displacement conditional branch
17973     instructions `bt' and `bf' are fast.  If `-mzdcbranch' is
17974     specified, the compiler will try to prefer zero displacement
17975     branch code sequences.  This is enabled by default when generating
17976     code for SH4 and SH4A.  It can be explicitly disabled by
17977     specifying `-mno-zdcbranch'.
17978
17979`-mcbranchdi'
17980     Enable the `cbranchdi4' instruction pattern.
17981
17982`-mcmpeqdi'
17983     Emit the `cmpeqdi_t' instruction pattern even when `-mcbranchdi'
17984     is in effect.
17985
17986`-mfused-madd'
17987`-mno-fused-madd'
17988     Generate code that uses (does not use) the floating-point multiply
17989     and accumulate instructions.  These instructions are generated by
17990     default if hardware floating point is used.  The machine-dependent
17991     `-mfused-madd' option is now mapped to the machine-independent
17992     `-ffp-contract=fast' option, and `-mno-fused-madd' is mapped to
17993     `-ffp-contract=off'.
17994
17995`-mfsca'
17996`-mno-fsca'
17997     Allow or disallow the compiler to emit the `fsca' instruction for
17998     sine and cosine approximations.  The option `-mfsca' must be used
17999     in combination with `-funsafe-math-optimizations'.  It is enabled
18000     by default when generating code for SH4A.  Using `-mno-fsca'
18001     disables sine and cosine approximations even if
18002     `-funsafe-math-optimizations' is in effect.
18003
18004`-mfsrra'
18005`-mno-fsrra'
18006     Allow or disallow the compiler to emit the `fsrra' instruction for
18007     reciprocal square root approximations.  The option `-mfsrra' must
18008     be used in combination with `-funsafe-math-optimizations' and
18009     `-ffinite-math-only'.  It is enabled by default when generating
18010     code for SH4A.  Using `-mno-fsrra' disables reciprocal square root
18011     approximations even if `-funsafe-math-optimizations' and
18012     `-ffinite-math-only' are in effect.
18013
18014`-mpretend-cmove'
18015     Prefer zero-displacement conditional branches for conditional move
18016     instruction patterns.  This can result in faster code on the SH4
18017     processor.
18018
18019
18020
18021File: gcc.info,  Node: Solaris 2 Options,  Next: SPARC Options,  Prev: SH Options,  Up: Submodel Options
18022
180233.17.39 Solaris 2 Options
18024-------------------------
18025
18026These `-m' options are supported on Solaris 2:
18027
18028`-mimpure-text'
18029     `-mimpure-text', used in addition to `-shared', tells the compiler
18030     to not pass `-z text' to the linker when linking a shared object.
18031     Using this option, you can link position-dependent code into a
18032     shared object.
18033
18034     `-mimpure-text' suppresses the "relocations remain against
18035     allocatable but non-writable sections" linker error message.
18036     However, the necessary relocations trigger copy-on-write, and the
18037     shared object is not actually shared across processes.  Instead of
18038     using `-mimpure-text', you should compile all source code with
18039     `-fpic' or `-fPIC'.
18040
18041
18042 These switches are supported in addition to the above on Solaris 2:
18043
18044`-pthreads'
18045     Add support for multithreading using the POSIX threads library.
18046     This option sets flags for both the preprocessor and linker.  This
18047     option does not affect the thread safety of object code produced
18048     by the compiler or that of libraries supplied with it.
18049
18050`-pthread'
18051     This is a synonym for `-pthreads'.
18052
18053
18054File: gcc.info,  Node: SPARC Options,  Next: SPU Options,  Prev: Solaris 2 Options,  Up: Submodel Options
18055
180563.17.40 SPARC Options
18057---------------------
18058
18059These `-m' options are supported on the SPARC:
18060
18061`-mno-app-regs'
18062`-mapp-regs'
18063     Specify `-mapp-regs' to generate output using the global registers
18064     2 through 4, which the SPARC SVR4 ABI reserves for applications.
18065     Like the global register 1, each global register 2 through 4 is
18066     then treated as an allocable register that is clobbered by
18067     function calls.  This is the default.
18068
18069     To be fully SVR4 ABI-compliant at the cost of some performance
18070     loss, specify `-mno-app-regs'.  You should compile libraries and
18071     system software with this option.
18072
18073`-mflat'
18074`-mno-flat'
18075     With `-mflat', the compiler does not generate save/restore
18076     instructions and uses a "flat" or single register window model.
18077     This model is compatible with the regular register window model.
18078     The local registers and the input registers (0-5) are still
18079     treated as "call-saved" registers and are saved on the stack as
18080     needed.
18081
18082     With `-mno-flat' (the default), the compiler generates save/restore
18083     instructions (except for leaf functions).  This is the normal
18084     operating mode.
18085
18086`-mfpu'
18087`-mhard-float'
18088     Generate output containing floating-point instructions.  This is
18089     the default.
18090
18091`-mno-fpu'
18092`-msoft-float'
18093     Generate output containing library calls for floating point.
18094     *Warning:* the requisite libraries are not available for all SPARC
18095     targets.  Normally the facilities of the machine's usual C
18096     compiler are used, but this cannot be done directly in
18097     cross-compilation.  You must make your own arrangements to provide
18098     suitable library functions for cross-compilation.  The embedded
18099     targets `sparc-*-aout' and `sparclite-*-*' do provide software
18100     floating-point support.
18101
18102     `-msoft-float' changes the calling convention in the output file;
18103     therefore, it is only useful if you compile _all_ of a program with
18104     this option.  In particular, you need to compile `libgcc.a', the
18105     library that comes with GCC, with `-msoft-float' in order for this
18106     to work.
18107
18108`-mhard-quad-float'
18109     Generate output containing quad-word (long double) floating-point
18110     instructions.
18111
18112`-msoft-quad-float'
18113     Generate output containing library calls for quad-word (long
18114     double) floating-point instructions.  The functions called are
18115     those specified in the SPARC ABI.  This is the default.
18116
18117     As of this writing, there are no SPARC implementations that have
18118     hardware support for the quad-word floating-point instructions.
18119     They all invoke a trap handler for one of these instructions, and
18120     then the trap handler emulates the effect of the instruction.
18121     Because of the trap handler overhead, this is much slower than
18122     calling the ABI library routines.  Thus the `-msoft-quad-float'
18123     option is the default.
18124
18125`-mno-unaligned-doubles'
18126`-munaligned-doubles'
18127     Assume that doubles have 8-byte alignment.  This is the default.
18128
18129     With `-munaligned-doubles', GCC assumes that doubles have 8-byte
18130     alignment only if they are contained in another type, or if they
18131     have an absolute address.  Otherwise, it assumes they have 4-byte
18132     alignment.  Specifying this option avoids some rare compatibility
18133     problems with code generated by other compilers.  It is not the
18134     default because it results in a performance loss, especially for
18135     floating-point code.
18136
18137`-muser-mode'
18138`-mno-user-mode'
18139     Do not generate code that can only run in supervisor mode.  This
18140     is relevant only for the `casa' instruction emitted for the LEON3
18141     processor.  The default is `-mno-user-mode'.
18142
18143`-mno-faster-structs'
18144`-mfaster-structs'
18145     With `-mfaster-structs', the compiler assumes that structures
18146     should have 8-byte alignment.  This enables the use of pairs of
18147     `ldd' and `std' instructions for copies in structure assignment,
18148     in place of twice as many `ld' and `st' pairs.  However, the use
18149     of this changed alignment directly violates the SPARC ABI.  Thus,
18150     it's intended only for use on targets where the developer
18151     acknowledges that their resulting code is not directly in line with
18152     the rules of the ABI.
18153
18154`-mcpu=CPU_TYPE'
18155     Set the instruction set, register set, and instruction scheduling
18156     parameters for machine type CPU_TYPE.  Supported values for
18157     CPU_TYPE are `v7', `cypress', `v8', `supersparc', `hypersparc',
18158     `leon', `leon3', `leon3v7', `sparclite', `f930', `f934',
18159     `sparclite86x', `sparclet', `tsc701', `v9', `ultrasparc',
18160     `ultrasparc3', `niagara', `niagara2', `niagara3' and `niagara4'.
18161
18162     Native Solaris and GNU/Linux toolchains also support the value
18163     `native', which selects the best architecture option for the host
18164     processor.  `-mcpu=native' has no effect if GCC does not recognize
18165     the processor.
18166
18167     Default instruction scheduling parameters are used for values that
18168     select an architecture and not an implementation.  These are `v7',
18169     `v8', `sparclite', `sparclet', `v9'.
18170
18171     Here is a list of each supported architecture and their supported
18172     implementations.
18173
18174    v7
18175          cypress, leon3v7
18176
18177    v8
18178          supersparc, hypersparc, leon, leon3
18179
18180    sparclite
18181          f930, f934, sparclite86x
18182
18183    sparclet
18184          tsc701
18185
18186    v9
18187          ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
18188
18189     By default (unless configured otherwise), GCC generates code for
18190     the V7 variant of the SPARC architecture.  With `-mcpu=cypress',
18191     the compiler additionally optimizes it for the Cypress CY7C602
18192     chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
18193     also appropriate for the older SPARCStation 1, 2, IPX etc.
18194
18195     With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC
18196     architecture.  The only difference from V7 code is that the
18197     compiler emits the integer multiply and integer divide
18198     instructions which exist in SPARC-V8 but not in SPARC-V7.  With
18199     `-mcpu=supersparc', the compiler additionally optimizes it for the
18200     SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
18201     series.
18202
18203     With `-mcpu=sparclite', GCC generates code for the SPARClite
18204     variant of the SPARC architecture.  This adds the integer
18205     multiply, integer divide step and scan (`ffs') instructions which
18206     exist in SPARClite but not in SPARC-V7.  With `-mcpu=f930', the
18207     compiler additionally optimizes it for the Fujitsu MB86930 chip,
18208     which is the original SPARClite, with no FPU.  With `-mcpu=f934',
18209     the compiler additionally optimizes it for the Fujitsu MB86934
18210     chip, which is the more recent SPARClite with FPU.
18211
18212     With `-mcpu=sparclet', GCC generates code for the SPARClet variant
18213     of the SPARC architecture.  This adds the integer multiply,
18214     multiply/accumulate, integer divide step and scan (`ffs')
18215     instructions which exist in SPARClet but not in SPARC-V7.  With
18216     `-mcpu=tsc701', the compiler additionally optimizes it for the
18217     TEMIC SPARClet chip.
18218
18219     With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC
18220     architecture.  This adds 64-bit integer and floating-point move
18221     instructions, 3 additional floating-point condition code registers
18222     and conditional move instructions.  With `-mcpu=ultrasparc', the
18223     compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
18224     chips.  With `-mcpu=ultrasparc3', the compiler additionally
18225     optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
18226     chips.  With `-mcpu=niagara', the compiler additionally optimizes
18227     it for Sun UltraSPARC T1 chips.  With `-mcpu=niagara2', the
18228     compiler additionally optimizes it for Sun UltraSPARC T2 chips.
18229     With `-mcpu=niagara3', the compiler additionally optimizes it for
18230     Sun UltraSPARC T3 chips.  With `-mcpu=niagara4', the compiler
18231     additionally optimizes it for Sun UltraSPARC T4 chips.
18232
18233`-mtune=CPU_TYPE'
18234     Set the instruction scheduling parameters for machine type
18235     CPU_TYPE, but do not set the instruction set or register set that
18236     the option `-mcpu=CPU_TYPE' does.
18237
18238     The same values for `-mcpu=CPU_TYPE' can be used for
18239     `-mtune=CPU_TYPE', but the only useful values are those that
18240     select a particular CPU implementation.  Those are `cypress',
18241     `supersparc', `hypersparc', `leon', `leon3', `leon3v7', `f930',
18242     `f934', `sparclite86x', `tsc701', `ultrasparc', `ultrasparc3',
18243     `niagara', `niagara2', `niagara3' and `niagara4'.  With native
18244     Solaris and GNU/Linux toolchains, `native' can also be used.
18245
18246`-mv8plus'
18247`-mno-v8plus'
18248     With `-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
18249     difference from the V8 ABI is that the global and out registers are
18250     considered 64 bits wide.  This is enabled by default on Solaris in
18251     32-bit mode for all SPARC-V9 processors.
18252
18253`-mvis'
18254`-mno-vis'
18255     With `-mvis', GCC generates code that takes advantage of the
18256     UltraSPARC Visual Instruction Set extensions.  The default is
18257     `-mno-vis'.
18258
18259`-mvis2'
18260`-mno-vis2'
18261     With `-mvis2', GCC generates code that takes advantage of version
18262     2.0 of the UltraSPARC Visual Instruction Set extensions.  The
18263     default is `-mvis2' when targeting a cpu that supports such
18264     instructions, such as UltraSPARC-III and later.  Setting `-mvis2'
18265     also sets `-mvis'.
18266
18267`-mvis3'
18268`-mno-vis3'
18269     With `-mvis3', GCC generates code that takes advantage of version
18270     3.0 of the UltraSPARC Visual Instruction Set extensions.  The
18271     default is `-mvis3' when targeting a cpu that supports such
18272     instructions, such as niagara-3 and later.  Setting `-mvis3' also
18273     sets `-mvis2' and `-mvis'.
18274
18275`-mcbcond'
18276`-mno-cbcond'
18277     With `-mcbcond', GCC generates code that takes advantage of
18278     compare-and-branch instructions, as defined in the Sparc
18279     Architecture 2011.  The default is `-mcbcond' when targeting a cpu
18280     that supports such instructions, such as niagara-4 and later.
18281
18282`-mpopc'
18283`-mno-popc'
18284     With `-mpopc', GCC generates code that takes advantage of the
18285     UltraSPARC population count instruction.  The default is `-mpopc'
18286     when targeting a cpu that supports such instructions, such as
18287     Niagara-2 and later.
18288
18289`-mfmaf'
18290`-mno-fmaf'
18291     With `-mfmaf', GCC generates code that takes advantage of the
18292     UltraSPARC Fused Multiply-Add Floating-point extensions.  The
18293     default is `-mfmaf' when targeting a cpu that supports such
18294     instructions, such as Niagara-3 and later.
18295
18296`-mfix-at697f'
18297     Enable the documented workaround for the single erratum of the
18298     Atmel AT697F processor (which corresponds to erratum #13 of the
18299     AT697E processor).
18300
18301`-mfix-ut699'
18302     Enable the documented workarounds for the floating-point errata
18303     and the data cache nullify errata of the UT699 processor.
18304
18305 These `-m' options are supported in addition to the above on SPARC-V9
18306processors in 64-bit environments:
18307
18308`-m32'
18309`-m64'
18310     Generate code for a 32-bit or 64-bit environment.  The 32-bit
18311     environment sets int, long and pointer to 32 bits.  The 64-bit
18312     environment sets int to 32 bits and long and pointer to 64 bits.
18313
18314`-mcmodel=WHICH'
18315     Set the code model to one of
18316
18317    `medlow'
18318          The Medium/Low code model: 64-bit addresses, programs must be
18319          linked in the low 32 bits of memory.  Programs can be
18320          statically or dynamically linked.
18321
18322    `medmid'
18323          The Medium/Middle code model: 64-bit addresses, programs must
18324          be linked in the low 44 bits of memory, the text and data
18325          segments must be less than 2GB in size and the data segment
18326          must be located within 2GB of the text segment.
18327
18328    `medany'
18329          The Medium/Anywhere code model: 64-bit addresses, programs
18330          may be linked anywhere in memory, the text and data segments
18331          must be less than 2GB in size and the data segment must be
18332          located within 2GB of the text segment.
18333
18334    `embmedany'
18335          The Medium/Anywhere code model for embedded systems: 64-bit
18336          addresses, the text and data segments must be less than 2GB in
18337          size, both starting anywhere in memory (determined at link
18338          time).  The global register %g4 points to the base of the
18339          data segment.  Programs are statically linked and PIC is not
18340          supported.
18341
18342`-mmemory-model=MEM-MODEL'
18343     Set the memory model in force on the processor to one of
18344
18345    `default'
18346          The default memory model for the processor and operating
18347          system.
18348
18349    `rmo'
18350          Relaxed Memory Order
18351
18352    `pso'
18353          Partial Store Order
18354
18355    `tso'
18356          Total Store Order
18357
18358    `sc'
18359          Sequential Consistency
18360
18361     These memory models are formally defined in Appendix D of the
18362     Sparc V9 architecture manual, as set in the processor's
18363     `PSTATE.MM' field.
18364
18365`-mstack-bias'
18366`-mno-stack-bias'
18367     With `-mstack-bias', GCC assumes that the stack pointer, and frame
18368     pointer if present, are offset by -2047 which must be added back
18369     when making stack frame references.  This is the default in 64-bit
18370     mode.  Otherwise, assume no such offset is present.
18371
18372
18373File: gcc.info,  Node: SPU Options,  Next: System V Options,  Prev: SPARC Options,  Up: Submodel Options
18374
183753.17.41 SPU Options
18376-------------------
18377
18378These `-m' options are supported on the SPU:
18379
18380`-mwarn-reloc'
18381`-merror-reloc'
18382     The loader for SPU does not handle dynamic relocations.  By
18383     default, GCC gives an error when it generates code that requires a
18384     dynamic relocation.  `-mno-error-reloc' disables the error,
18385     `-mwarn-reloc' generates a warning instead.
18386
18387`-msafe-dma'
18388`-munsafe-dma'
18389     Instructions that initiate or test completion of DMA must not be
18390     reordered with respect to loads and stores of the memory that is
18391     being accessed.  With `-munsafe-dma' you must use the `volatile'
18392     keyword to protect memory accesses, but that can lead to
18393     inefficient code in places where the memory is known to not
18394     change.  Rather than mark the memory as volatile, you can use
18395     `-msafe-dma' to tell the compiler to treat the DMA instructions as
18396     potentially affecting all memory.
18397
18398`-mbranch-hints'
18399     By default, GCC generates a branch hint instruction to avoid
18400     pipeline stalls for always-taken or probably-taken branches.  A
18401     hint is not generated closer than 8 instructions away from its
18402     branch.  There is little reason to disable them, except for
18403     debugging purposes, or to make an object a little bit smaller.
18404
18405`-msmall-mem'
18406`-mlarge-mem'
18407     By default, GCC generates code assuming that addresses are never
18408     larger than 18 bits.  With `-mlarge-mem' code is generated that
18409     assumes a full 32-bit address.
18410
18411`-mstdmain'
18412     By default, GCC links against startup code that assumes the
18413     SPU-style main function interface (which has an unconventional
18414     parameter list).  With `-mstdmain', GCC links your program against
18415     startup code that assumes a C99-style interface to `main',
18416     including a local copy of `argv' strings.
18417
18418`-mfixed-range=REGISTER-RANGE'
18419     Generate code treating the given register range as fixed registers.
18420     A fixed register is one that the register allocator cannot use.
18421     This is useful when compiling kernel code.  A register range is
18422     specified as two registers separated by a dash.  Multiple register
18423     ranges can be specified separated by a comma.
18424
18425`-mea32'
18426`-mea64'
18427     Compile code assuming that pointers to the PPU address space
18428     accessed via the `__ea' named address space qualifier are either
18429     32 or 64 bits wide.  The default is 32 bits.  As this is an
18430     ABI-changing option, all object code in an executable must be
18431     compiled with the same setting.
18432
18433`-maddress-space-conversion'
18434`-mno-address-space-conversion'
18435     Allow/disallow treating the `__ea' address space as superset of
18436     the generic address space.  This enables explicit type casts
18437     between `__ea' and generic pointer as well as implicit conversions
18438     of generic pointers to `__ea' pointers.  The default is to allow
18439     address space pointer conversions.
18440
18441`-mcache-size=CACHE-SIZE'
18442     This option controls the version of libgcc that the compiler links
18443     to an executable and selects a software-managed cache for
18444     accessing variables in the `__ea' address space with a particular
18445     cache size.  Possible options for CACHE-SIZE are `8', `16', `32',
18446     `64' and `128'.  The default cache size is 64KB.
18447
18448`-matomic-updates'
18449`-mno-atomic-updates'
18450     This option controls the version of libgcc that the compiler links
18451     to an executable and selects whether atomic updates to the
18452     software-managed cache of PPU-side variables are used.  If you use
18453     atomic updates, changes to a PPU variable from SPU code using the
18454     `__ea' named address space qualifier do not interfere with changes
18455     to other PPU variables residing in the same cache line from PPU
18456     code.  If you do not use atomic updates, such interference may
18457     occur; however, writing back cache lines is more efficient.  The
18458     default behavior is to use atomic updates.
18459
18460`-mdual-nops'
18461`-mdual-nops=N'
18462     By default, GCC inserts nops to increase dual issue when it expects
18463     it to increase performance.  N can be a value from 0 to 10.  A
18464     smaller N inserts fewer nops.  10 is the default, 0 is the same as
18465     `-mno-dual-nops'.  Disabled with `-Os'.
18466
18467`-mhint-max-nops=N'
18468     Maximum number of nops to insert for a branch hint.  A branch hint
18469     must be at least 8 instructions away from the branch it is
18470     affecting.  GCC inserts up to N nops to enforce this, otherwise it
18471     does not generate the branch hint.
18472
18473`-mhint-max-distance=N'
18474     The encoding of the branch hint instruction limits the hint to be
18475     within 256 instructions of the branch it is affecting.  By
18476     default, GCC makes sure it is within 125.
18477
18478`-msafe-hints'
18479     Work around a hardware bug that causes the SPU to stall
18480     indefinitely.  By default, GCC inserts the `hbrp' instruction to
18481     make sure this stall won't happen.
18482
18483
18484
18485File: gcc.info,  Node: System V Options,  Next: TILE-Gx Options,  Prev: SPU Options,  Up: Submodel Options
18486
184873.17.42 Options for System V
18488----------------------------
18489
18490These additional options are available on System V Release 4 for
18491compatibility with other compilers on those systems:
18492
18493`-G'
18494     Create a shared object.  It is recommended that `-symbolic' or
18495     `-shared' be used instead.
18496
18497`-Qy'
18498     Identify the versions of each tool used by the compiler, in a
18499     `.ident' assembler directive in the output.
18500
18501`-Qn'
18502     Refrain from adding `.ident' directives to the output file (this is
18503     the default).
18504
18505`-YP,DIRS'
18506     Search the directories DIRS, and no others, for libraries
18507     specified with `-l'.
18508
18509`-Ym,DIR'
18510     Look in the directory DIR to find the M4 preprocessor.  The
18511     assembler uses this option.
18512
18513
18514File: gcc.info,  Node: TILE-Gx Options,  Next: TILEPro Options,  Prev: System V Options,  Up: Submodel Options
18515
185163.17.43 TILE-Gx Options
18517-----------------------
18518
18519These `-m' options are supported on the TILE-Gx:
18520
18521`-mcmodel=small'
18522     Generate code for the small model.  The distance for direct calls
18523     is limited to 500M in either direction.  PC-relative addresses are
18524     32 bits.  Absolute addresses support the full address range.
18525
18526`-mcmodel=large'
18527     Generate code for the large model.  There is no limitation on call
18528     distance, pc-relative addresses, or absolute addresses.
18529
18530`-mcpu=NAME'
18531     Selects the type of CPU to be targeted.  Currently the only
18532     supported type is `tilegx'.
18533
18534`-m32'
18535`-m64'
18536     Generate code for a 32-bit or 64-bit environment.  The 32-bit
18537     environment sets int, long, and pointer to 32 bits.  The 64-bit
18538     environment sets int to 32 bits and long and pointer to 64 bits.
18539
18540
18541File: gcc.info,  Node: TILEPro Options,  Next: V850 Options,  Prev: TILE-Gx Options,  Up: Submodel Options
18542
185433.17.44 TILEPro Options
18544-----------------------
18545
18546These `-m' options are supported on the TILEPro:
18547
18548`-mcpu=NAME'
18549     Selects the type of CPU to be targeted.  Currently the only
18550     supported type is `tilepro'.
18551
18552`-m32'
18553     Generate code for a 32-bit environment, which sets int, long, and
18554     pointer to 32 bits.  This is the only supported behavior so the
18555     flag is essentially ignored.
18556
18557
18558File: gcc.info,  Node: V850 Options,  Next: VAX Options,  Prev: TILEPro Options,  Up: Submodel Options
18559
185603.17.45 V850 Options
18561--------------------
18562
18563These `-m' options are defined for V850 implementations:
18564
18565`-mlong-calls'
18566`-mno-long-calls'
18567     Treat all calls as being far away (near).  If calls are assumed to
18568     be far away, the compiler always loads the function's address into
18569     a register, and calls indirect through the pointer.
18570
18571`-mno-ep'
18572`-mep'
18573     Do not optimize (do optimize) basic blocks that use the same index
18574     pointer 4 or more times to copy pointer into the `ep' register, and
18575     use the shorter `sld' and `sst' instructions.  The `-mep' option
18576     is on by default if you optimize.
18577
18578`-mno-prolog-function'
18579`-mprolog-function'
18580     Do not use (do use) external functions to save and restore
18581     registers at the prologue and epilogue of a function.  The
18582     external functions are slower, but use less code space if more
18583     than one function saves the same number of registers.  The
18584     `-mprolog-function' option is on by default if you optimize.
18585
18586`-mspace'
18587     Try to make the code as small as possible.  At present, this just
18588     turns on the `-mep' and `-mprolog-function' options.
18589
18590`-mtda=N'
18591     Put static or global variables whose size is N bytes or less into
18592     the tiny data area that register `ep' points to.  The tiny data
18593     area can hold up to 256 bytes in total (128 bytes for byte
18594     references).
18595
18596`-msda=N'
18597     Put static or global variables whose size is N bytes or less into
18598     the small data area that register `gp' points to.  The small data
18599     area can hold up to 64 kilobytes.
18600
18601`-mzda=N'
18602     Put static or global variables whose size is N bytes or less into
18603     the first 32 kilobytes of memory.
18604
18605`-mv850'
18606     Specify that the target processor is the V850.
18607
18608`-mv850e3v5'
18609     Specify that the target processor is the V850E3V5.  The
18610     preprocessor constant `__v850e3v5__' is defined if this option is
18611     used.
18612
18613`-mv850e2v4'
18614     Specify that the target processor is the V850E3V5.  This is an
18615     alias for the `-mv850e3v5' option.
18616
18617`-mv850e2v3'
18618     Specify that the target processor is the V850E2V3.  The
18619     preprocessor constant `__v850e2v3__' is defined if this option is
18620     used.
18621
18622`-mv850e2'
18623     Specify that the target processor is the V850E2.  The preprocessor
18624     constant `__v850e2__' is defined if this option is used.
18625
18626`-mv850e1'
18627     Specify that the target processor is the V850E1.  The preprocessor
18628     constants `__v850e1__' and `__v850e__' are defined if this option
18629     is used.
18630
18631`-mv850es'
18632     Specify that the target processor is the V850ES.  This is an alias
18633     for the `-mv850e1' option.
18634
18635`-mv850e'
18636     Specify that the target processor is the V850E.  The preprocessor
18637     constant `__v850e__' is defined if this option is used.
18638
18639     If neither `-mv850' nor `-mv850e' nor `-mv850e1' nor `-mv850e2'
18640     nor `-mv850e2v3' nor `-mv850e3v5' are defined then a default
18641     target processor is chosen and the relevant `__v850*__'
18642     preprocessor constant is defined.
18643
18644     The preprocessor constants `__v850' and `__v851__' are always
18645     defined, regardless of which processor variant is the target.
18646
18647`-mdisable-callt'
18648`-mno-disable-callt'
18649     This option suppresses generation of the `CALLT' instruction for
18650     the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
18651     v850 architecture.
18652
18653     This option is enabled by default when the RH850 ABI is in use
18654     (see `-mrh850-abi'), and disabled by default when the GCC ABI is
18655     in use.  If `CALLT' instructions are being generated then the C
18656     preprocessor symbol `__V850_CALLT__' will be defined.
18657
18658`-mrelax'
18659`-mno-relax'
18660     Pass on (or do not pass on) the `-mrelax' command line option to
18661     the assembler.
18662
18663`-mlong-jumps'
18664`-mno-long-jumps'
18665     Disable (or re-enable) the generation of PC-relative jump
18666     instructions.
18667
18668`-msoft-float'
18669`-mhard-float'
18670     Disable (or re-enable) the generation of hardware floating point
18671     instructions.  This option is only significant when the target
18672     architecture is `V850E2V3' or higher.  If hardware floating point
18673     instructions are being generated then the C preprocessor symbol
18674     `__FPU_OK__' will be defined, otherwise the symbol `__NO_FPU__'
18675     will be defined.
18676
18677`-mloop'
18678     Enables the use of the e3v5 LOOP instruction.  The use of this
18679     instruction is not enabled by default when the e3v5 architecture is
18680     selected because its use is still experimental.
18681
18682`-mrh850-abi'
18683`-mghs'
18684     Enables support for the RH850 version of the V850 ABI.  This is the
18685     default.  With this version of the ABI the following rules apply:
18686
18687        * Integer sized structures and unions are returned via a memory
18688          pointer rather than a register.
18689
18690        * Large structures and unions (more than 8 bytes in size) are
18691          passed by value.
18692
18693        * Functions are aligned to 16-bit boundaries.
18694
18695        * The `-m8byte-align' command line option is supported.
18696
18697        * The `-mdisable-callt' command line option is enabled by
18698          default.  The `-mno-disable-callt' command line option is not
18699          supported.
18700
18701     When this version of the ABI is enabled the C preprocessor symbol
18702     `__V850_RH850_ABI__' is defined.
18703
18704`-mgcc-abi'
18705     Enables support for the old GCC version of the V850 ABI.  With this
18706     version of the ABI the following rules apply:
18707
18708        * Integer sized structures and unions are returned in register
18709          `r10'.
18710
18711        * Large structures and unions (more than 8 bytes in size) are
18712          passed by reference.
18713
18714        * Functions are aligned to 32-bit boundaries, unless optimizing
18715          for size.
18716
18717        * The `-m8byte-align' command line option is not supported.
18718
18719        * The `-mdisable-callt' command line option is supported but not
18720          enabled by default.
18721
18722     When this version of the ABI is enabled the C preprocessor symbol
18723     `__V850_GCC_ABI__' is defined.
18724
18725`-m8byte-align'
18726`-mno-8byte-align'
18727     Enables support for `doubles' and `long long' types to be aligned
18728     on 8-byte boundaries.  The default is to restrict the alignment of
18729     all objects to at most 4-bytes.  When `-m8byte-align' is in effect
18730     the C preprocessor symbol `__V850_8BYTE_ALIGN__' will be defined.
18731
18732`-mbig-switch'
18733     Generate code suitable for big switch tables.  Use this option
18734     only if the assembler/linker complain about out of range branches
18735     within a switch table.
18736
18737`-mapp-regs'
18738     This option causes r2 and r5 to be used in the code generated by
18739     the compiler.  This setting is the default.
18740
18741`-mno-app-regs'
18742     This option causes r2 and r5 to be treated as fixed registers.
18743
18744
18745
18746File: gcc.info,  Node: VAX Options,  Next: VMS Options,  Prev: V850 Options,  Up: Submodel Options
18747
187483.17.46 VAX Options
18749-------------------
18750
18751These `-m' options are defined for the VAX:
18752
18753`-munix'
18754     Do not output certain jump instructions (`aobleq' and so on) that
18755     the Unix assembler for the VAX cannot handle across long ranges.
18756
18757`-mgnu'
18758     Do output those jump instructions, on the assumption that the GNU
18759     assembler is being used.
18760
18761`-mg'
18762     Output code for G-format floating-point numbers instead of
18763     D-format.
18764
18765
18766File: gcc.info,  Node: VMS Options,  Next: VxWorks Options,  Prev: VAX Options,  Up: Submodel Options
18767
187683.17.47 VMS Options
18769-------------------
18770
18771These `-m' options are defined for the VMS implementations:
18772
18773`-mvms-return-codes'
18774     Return VMS condition codes from `main'. The default is to return
18775     POSIX-style condition (e.g. error) codes.
18776
18777`-mdebug-main=PREFIX'
18778     Flag the first routine whose name starts with PREFIX as the main
18779     routine for the debugger.
18780
18781`-mmalloc64'
18782     Default to 64-bit memory allocation routines.
18783
18784`-mpointer-size=SIZE'
18785     Set the default size of pointers. Possible options for SIZE are
18786     `32' or `short' for 32 bit pointers, `64' or `long' for 64 bit
18787     pointers, and `no' for supporting only 32 bit pointers.  The later
18788     option disables `pragma pointer_size'.
18789
18790
18791File: gcc.info,  Node: VxWorks Options,  Next: x86-64 Options,  Prev: VMS Options,  Up: Submodel Options
18792
187933.17.48 VxWorks Options
18794-----------------------
18795
18796The options in this section are defined for all VxWorks targets.
18797Options specific to the target hardware are listed with the other
18798options for that target.
18799
18800`-mrtp'
18801     GCC can generate code for both VxWorks kernels and real time
18802     processes (RTPs).  This option switches from the former to the
18803     latter.  It also defines the preprocessor macro `__RTP__'.
18804
18805`-non-static'
18806     Link an RTP executable against shared libraries rather than static
18807     libraries.  The options `-static' and `-shared' can also be used
18808     for RTPs (*note Link Options::); `-static' is the default.
18809
18810`-Bstatic'
18811`-Bdynamic'
18812     These options are passed down to the linker.  They are defined for
18813     compatibility with Diab.
18814
18815`-Xbind-lazy'
18816     Enable lazy binding of function calls.  This option is equivalent
18817     to `-Wl,-z,now' and is defined for compatibility with Diab.
18818
18819`-Xbind-now'
18820     Disable lazy binding of function calls.  This option is the
18821     default and is defined for compatibility with Diab.
18822
18823
18824File: gcc.info,  Node: x86-64 Options,  Next: Xstormy16 Options,  Prev: VxWorks Options,  Up: Submodel Options
18825
188263.17.49 x86-64 Options
18827----------------------
18828
18829These are listed under *Note i386 and x86-64 Options::.
18830
18831
18832File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: x86-64 Options,  Up: Submodel Options
18833
188343.17.50 Xstormy16 Options
18835-------------------------
18836
18837These options are defined for Xstormy16:
18838
18839`-msim'
18840     Choose startup files and linker script suitable for the simulator.
18841
18842
18843File: gcc.info,  Node: Xtensa Options,  Next: zSeries Options,  Prev: Xstormy16 Options,  Up: Submodel Options
18844
188453.17.51 Xtensa Options
18846----------------------
18847
18848These options are supported for Xtensa targets:
18849
18850`-mconst16'
18851`-mno-const16'
18852     Enable or disable use of `CONST16' instructions for loading
18853     constant values.  The `CONST16' instruction is currently not a
18854     standard option from Tensilica.  When enabled, `CONST16'
18855     instructions are always used in place of the standard `L32R'
18856     instructions.  The use of `CONST16' is enabled by default only if
18857     the `L32R' instruction is not available.
18858
18859`-mfused-madd'
18860`-mno-fused-madd'
18861     Enable or disable use of fused multiply/add and multiply/subtract
18862     instructions in the floating-point option.  This has no effect if
18863     the floating-point option is not also enabled.  Disabling fused
18864     multiply/add and multiply/subtract instructions forces the
18865     compiler to use separate instructions for the multiply and
18866     add/subtract operations.  This may be desirable in some cases
18867     where strict IEEE 754-compliant results are required: the fused
18868     multiply add/subtract instructions do not round the intermediate
18869     result, thereby producing results with _more_ bits of precision
18870     than specified by the IEEE standard.  Disabling fused multiply
18871     add/subtract instructions also ensures that the program output is
18872     not sensitive to the compiler's ability to combine multiply and
18873     add/subtract operations.
18874
18875`-mserialize-volatile'
18876`-mno-serialize-volatile'
18877     When this option is enabled, GCC inserts `MEMW' instructions before
18878     `volatile' memory references to guarantee sequential consistency.
18879     The default is `-mserialize-volatile'.  Use
18880     `-mno-serialize-volatile' to omit the `MEMW' instructions.
18881
18882`-mforce-no-pic'
18883     For targets, like GNU/Linux, where all user-mode Xtensa code must
18884     be position-independent code (PIC), this option disables PIC for
18885     compiling kernel code.
18886
18887`-mtext-section-literals'
18888`-mno-text-section-literals'
18889     Control the treatment of literal pools.  The default is
18890     `-mno-text-section-literals', which places literals in a separate
18891     section in the output file.  This allows the literal pool to be
18892     placed in a data RAM/ROM, and it also allows the linker to combine
18893     literal pools from separate object files to remove redundant
18894     literals and improve code size.  With `-mtext-section-literals',
18895     the literals are interspersed in the text section in order to keep
18896     them as close as possible to their references.  This may be
18897     necessary for large assembly files.
18898
18899`-mtarget-align'
18900`-mno-target-align'
18901     When this option is enabled, GCC instructs the assembler to
18902     automatically align instructions to reduce branch penalties at the
18903     expense of some code density.  The assembler attempts to widen
18904     density instructions to align branch targets and the instructions
18905     following call instructions.  If there are not enough preceding
18906     safe density instructions to align a target, no widening is
18907     performed.  The default is `-mtarget-align'.  These options do not
18908     affect the treatment of auto-aligned instructions like `LOOP',
18909     which the assembler always aligns, either by widening density
18910     instructions or by inserting NOP instructions.
18911
18912`-mlongcalls'
18913`-mno-longcalls'
18914     When this option is enabled, GCC instructs the assembler to
18915     translate direct calls to indirect calls unless it can determine
18916     that the target of a direct call is in the range allowed by the
18917     call instruction.  This translation typically occurs for calls to
18918     functions in other source files.  Specifically, the assembler
18919     translates a direct `CALL' instruction into an `L32R' followed by
18920     a `CALLX' instruction.  The default is `-mno-longcalls'.  This
18921     option should be used in programs where the call target can
18922     potentially be out of range.  This option is implemented in the
18923     assembler, not the compiler, so the assembly code generated by GCC
18924     still shows direct call instructions--look at the disassembled
18925     object code to see the actual instructions.  Note that the
18926     assembler uses an indirect call for every cross-file call, not
18927     just those that really are out of range.
18928
18929
18930File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options
18931
189323.17.52 zSeries Options
18933-----------------------
18934
18935These are listed under *Note S/390 and zSeries Options::.
18936
18937
18938File: gcc.info,  Node: Code Gen Options,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
18939
189403.18 Options for Code Generation Conventions
18941============================================
18942
18943These machine-independent options control the interface conventions
18944used in code generation.
18945
18946 Most of them have both positive and negative forms; the negative form
18947of `-ffoo' is `-fno-foo'.  In the table below, only one of the forms is
18948listed--the one that is not the default.  You can figure out the other
18949form by either removing `no-' or adding it.
18950
18951`-fbounds-check'
18952     For front ends that support it, generate additional code to check
18953     that indices used to access arrays are within the declared range.
18954     This is currently only supported by the Java and Fortran front
18955     ends, where this option defaults to true and false respectively.
18956
18957`-fstack-reuse=REUSE-LEVEL'
18958     This option controls stack space reuse for user declared
18959     local/auto variables and compiler generated temporaries.
18960     REUSE_LEVEL can be `all', `named_vars', or `none'. `all' enables
18961     stack reuse for all local variables and temporaries, `named_vars'
18962     enables the reuse only for user defined local variables with
18963     names, and `none' disables stack reuse completely. The default
18964     value is `all'. The option is needed when the program extends the
18965     lifetime of a scoped local variable or a compiler generated
18966     temporary beyond the end point defined by the language.  When a
18967     lifetime of a variable ends, and if the variable lives in memory,
18968     the optimizing compiler has the freedom to reuse its stack space
18969     with other temporaries or scoped local variables whose live range
18970     does not overlap with it. Legacy code extending local lifetime
18971     will likely to break with the stack reuse optimization.
18972
18973     For example,
18974
18975             int *p;
18976             {
18977               int local1;
18978
18979               p = &local1;
18980               local1 = 10;
18981               ....
18982             }
18983             {
18984                int local2;
18985                local2 = 20;
18986                ...
18987             }
18988
18989             if (*p == 10)  // out of scope use of local1
18990               {
18991
18992               }
18993
18994     Another example:
18995
18996             struct A
18997             {
18998                 A(int k) : i(k), j(k) { }
18999                 int i;
19000                 int j;
19001             };
19002
19003             A *ap;
19004
19005             void foo(const A& ar)
19006             {
19007                ap = &ar;
19008             }
19009
19010             void bar()
19011             {
19012                foo(A(10)); // temp object's lifetime ends when foo returns
19013
19014                {
19015                  A a(20);
19016                  ....
19017                }
19018                ap->i+= 10;  // ap references out of scope temp whose space
19019                             // is reused with a. What is the value of ap->i?
19020             }
19021
19022     The lifetime of a compiler generated temporary is well defined by
19023     the C++ standard. When a lifetime of a temporary ends, and if the
19024     temporary lives in memory, the optimizing compiler has the freedom
19025     to reuse its stack space with other temporaries or scoped local
19026     variables whose live range does not overlap with it. However some
19027     of the legacy code relies on the behavior of older compilers in
19028     which temporaries' stack space is not reused, the aggressive stack
19029     reuse can lead to runtime errors. This option is used to control
19030     the temporary stack reuse optimization.
19031
19032`-ftrapv'
19033     This option generates traps for signed overflow on addition,
19034     subtraction, multiplication operations.
19035
19036`-fwrapv'
19037     This option instructs the compiler to assume that signed arithmetic
19038     overflow of addition, subtraction and multiplication wraps around
19039     using twos-complement representation.  This flag enables some
19040     optimizations and disables others.  This option is enabled by
19041     default for the Java front end, as required by the Java language
19042     specification.
19043
19044`-fexceptions'
19045     Enable exception handling.  Generates extra code needed to
19046     propagate exceptions.  For some targets, this implies GCC
19047     generates frame unwind information for all functions, which can
19048     produce significant data size overhead, although it does not
19049     affect execution.  If you do not specify this option, GCC enables
19050     it by default for languages like C++ that normally require
19051     exception handling, and disables it for languages like C that do
19052     not normally require it.  However, you may need to enable this
19053     option when compiling C code that needs to interoperate properly
19054     with exception handlers written in C++.  You may also wish to
19055     disable this option if you are compiling older C++ programs that
19056     don't use exception handling.
19057
19058`-fnon-call-exceptions'
19059     Generate code that allows trapping instructions to throw
19060     exceptions.  Note that this requires platform-specific runtime
19061     support that does not exist everywhere.  Moreover, it only allows
19062     _trapping_ instructions to throw exceptions, i.e. memory
19063     references or floating-point instructions.  It does not allow
19064     exceptions to be thrown from arbitrary signal handlers such as
19065     `SIGALRM'.
19066
19067`-fdelete-dead-exceptions'
19068     Consider that instructions that may throw exceptions but don't
19069     otherwise contribute to the execution of the program can be
19070     optimized away.  This option is enabled by default for the Ada
19071     front end, as permitted by the Ada language specification.
19072     Optimization passes that cause dead exceptions to be removed are
19073     enabled independently at different optimization levels.
19074
19075`-funwind-tables'
19076     Similar to `-fexceptions', except that it just generates any needed
19077     static data, but does not affect the generated code in any other
19078     way.  You normally do not need to enable this option; instead, a
19079     language processor that needs this handling enables it on your
19080     behalf.
19081
19082`-fasynchronous-unwind-tables'
19083     Generate unwind table in DWARF 2 format, if supported by target
19084     machine.  The table is exact at each instruction boundary, so it
19085     can be used for stack unwinding from asynchronous events (such as
19086     debugger or garbage collector).
19087
19088`-fno-gnu-unique'
19089     On systems with recent GNU assembler and C library, the C++
19090     compiler uses the `STB_GNU_UNIQUE' binding to make sure that
19091     definitions of template static data members and static local
19092     variables in inline functions are unique even in the presence of
19093     `RTLD_LOCAL'; this is necessary to avoid problems with a library
19094     used by two different `RTLD_LOCAL' plugins depending on a
19095     definition in one of them and therefore disagreeing with the other
19096     one about the binding of the symbol.  But this causes `dlclose' to
19097     be ignored for affected DSOs; if your program relies on
19098     reinitialization of a DSO via `dlclose' and `dlopen', you can use
19099     `-fno-gnu-unique'.
19100
19101`-fpcc-struct-return'
19102     Return "short" `struct' and `union' values in memory like longer
19103     ones, rather than in registers.  This convention is less
19104     efficient, but it has the advantage of allowing intercallability
19105     between GCC-compiled files and files compiled with other
19106     compilers, particularly the Portable C Compiler (pcc).
19107
19108     The precise convention for returning structures in memory depends
19109     on the target configuration macros.
19110
19111     Short structures and unions are those whose size and alignment
19112     match that of some integer type.
19113
19114     *Warning:* code compiled with the `-fpcc-struct-return' switch is
19115     not binary compatible with code compiled with the
19116     `-freg-struct-return' switch.  Use it to conform to a non-default
19117     application binary interface.
19118
19119`-freg-struct-return'
19120     Return `struct' and `union' values in registers when possible.
19121     This is more efficient for small structures than
19122     `-fpcc-struct-return'.
19123
19124     If you specify neither `-fpcc-struct-return' nor
19125     `-freg-struct-return', GCC defaults to whichever convention is
19126     standard for the target.  If there is no standard convention, GCC
19127     defaults to `-fpcc-struct-return', except on targets where GCC is
19128     the principal compiler.  In those cases, we can choose the
19129     standard, and we chose the more efficient register return
19130     alternative.
19131
19132     *Warning:* code compiled with the `-freg-struct-return' switch is
19133     not binary compatible with code compiled with the
19134     `-fpcc-struct-return' switch.  Use it to conform to a non-default
19135     application binary interface.
19136
19137`-fshort-enums'
19138     Allocate to an `enum' type only as many bytes as it needs for the
19139     declared range of possible values.  Specifically, the `enum' type
19140     is equivalent to the smallest integer type that has enough room.
19141
19142     *Warning:* the `-fshort-enums' switch causes GCC to generate code
19143     that is not binary compatible with code generated without that
19144     switch.  Use it to conform to a non-default application binary
19145     interface.
19146
19147`-fshort-double'
19148     Use the same size for `double' as for `float'.
19149
19150     *Warning:* the `-fshort-double' switch causes GCC to generate code
19151     that is not binary compatible with code generated without that
19152     switch.  Use it to conform to a non-default application binary
19153     interface.
19154
19155`-fshort-wchar'
19156     Override the underlying type for `wchar_t' to be `short unsigned
19157     int' instead of the default for the target.  This option is useful
19158     for building programs to run under WINE.
19159
19160     *Warning:* the `-fshort-wchar' switch causes GCC to generate code
19161     that is not binary compatible with code generated without that
19162     switch.  Use it to conform to a non-default application binary
19163     interface.
19164
19165`-fno-common'
19166     In C code, controls the placement of uninitialized global
19167     variables.  Unix C compilers have traditionally permitted multiple
19168     definitions of such variables in different compilation units by
19169     placing the variables in a common block.  This is the behavior
19170     specified by `-fcommon', and is the default for GCC on most
19171     targets.  On the other hand, this behavior is not required by ISO
19172     C, and on some targets may carry a speed or code size penalty on
19173     variable references.  The `-fno-common' option specifies that the
19174     compiler should place uninitialized global variables in the data
19175     section of the object file, rather than generating them as common
19176     blocks.  This has the effect that if the same variable is declared
19177     (without `extern') in two different compilations, you get a
19178     multiple-definition error when you link them.  In this case, you
19179     must compile with `-fcommon' instead.  Compiling with
19180     `-fno-common' is useful on targets for which it provides better
19181     performance, or if you wish to verify that the program will work
19182     on other systems that always treat uninitialized variable
19183     declarations this way.
19184
19185`-fno-ident'
19186     Ignore the `#ident' directive.
19187
19188`-finhibit-size-directive'
19189     Don't output a `.size' assembler directive, or anything else that
19190     would cause trouble if the function is split in the middle, and the
19191     two halves are placed at locations far apart in memory.  This
19192     option is used when compiling `crtstuff.c'; you should not need to
19193     use it for anything else.
19194
19195`-fverbose-asm'
19196     Put extra commentary information in the generated assembly code to
19197     make it more readable.  This option is generally only of use to
19198     those who actually need to read the generated assembly code
19199     (perhaps while debugging the compiler itself).
19200
19201     `-fno-verbose-asm', the default, causes the extra information to
19202     be omitted and is useful when comparing two assembler files.
19203
19204`-frecord-gcc-switches'
19205     This switch causes the command line used to invoke the compiler to
19206     be recorded into the object file that is being created.  This
19207     switch is only implemented on some targets and the exact format of
19208     the recording is target and binary file format dependent, but it
19209     usually takes the form of a section containing ASCII text.  This
19210     switch is related to the `-fverbose-asm' switch, but that switch
19211     only records information in the assembler output file as comments,
19212     so it never reaches the object file.  See also
19213     `-grecord-gcc-switches' for another way of storing compiler
19214     options into the object file.
19215
19216`-fpic'
19217     Generate position-independent code (PIC) suitable for use in a
19218     shared library, if supported for the target machine.  Such code
19219     accesses all constant addresses through a global offset table
19220     (GOT).  The dynamic loader resolves the GOT entries when the
19221     program starts (the dynamic loader is not part of GCC; it is part
19222     of the operating system).  If the GOT size for the linked
19223     executable exceeds a machine-specific maximum size, you get an
19224     error message from the linker indicating that `-fpic' does not
19225     work; in that case, recompile with `-fPIC' instead.  (These
19226     maximums are 8k on the SPARC and 32k on the m68k and RS/6000.  The
19227     386 has no such limit.)
19228
19229     Position-independent code requires special support, and therefore
19230     works only on certain machines.  For the 386, GCC supports PIC for
19231     System V but not for the Sun 386i.  Code generated for the IBM
19232     RS/6000 is always position-independent.
19233
19234     When this flag is set, the macros `__pic__' and `__PIC__' are
19235     defined to 1.
19236
19237`-fPIC'
19238     If supported for the target machine, emit position-independent
19239     code, suitable for dynamic linking and avoiding any limit on the
19240     size of the global offset table.  This option makes a difference
19241     on the m68k, PowerPC and SPARC.
19242
19243     Position-independent code requires special support, and therefore
19244     works only on certain machines.
19245
19246     When this flag is set, the macros `__pic__' and `__PIC__' are
19247     defined to 2.
19248
19249`-fpie'
19250`-fPIE'
19251     These options are similar to `-fpic' and `-fPIC', but generated
19252     position independent code can be only linked into executables.
19253     Usually these options are used when `-pie' GCC option is used
19254     during linking.
19255
19256     `-fpie' and `-fPIE' both define the macros `__pie__' and
19257     `__PIE__'.  The macros have the value 1 for `-fpie' and 2 for
19258     `-fPIE'.
19259
19260`-fno-jump-tables'
19261     Do not use jump tables for switch statements even where it would be
19262     more efficient than other code generation strategies.  This option
19263     is of use in conjunction with `-fpic' or `-fPIC' for building code
19264     that forms part of a dynamic linker and cannot reference the
19265     address of a jump table.  On some targets, jump tables do not
19266     require a GOT and this option is not needed.
19267
19268`-ffixed-REG'
19269     Treat the register named REG as a fixed register; generated code
19270     should never refer to it (except perhaps as a stack pointer, frame
19271     pointer or in some other fixed role).
19272
19273     REG must be the name of a register.  The register names accepted
19274     are machine-specific and are defined in the `REGISTER_NAMES' macro
19275     in the machine description macro file.
19276
19277     This flag does not have a negative form, because it specifies a
19278     three-way choice.
19279
19280`-fcall-used-REG'
19281     Treat the register named REG as an allocable register that is
19282     clobbered by function calls.  It may be allocated for temporaries
19283     or variables that do not live across a call.  Functions compiled
19284     this way do not save and restore the register REG.
19285
19286     It is an error to use this flag with the frame pointer or stack
19287     pointer.  Use of this flag for other registers that have fixed
19288     pervasive roles in the machine's execution model produces
19289     disastrous results.
19290
19291     This flag does not have a negative form, because it specifies a
19292     three-way choice.
19293
19294`-fcall-saved-REG'
19295     Treat the register named REG as an allocable register saved by
19296     functions.  It may be allocated even for temporaries or variables
19297     that live across a call.  Functions compiled this way save and
19298     restore the register REG if they use it.
19299
19300     It is an error to use this flag with the frame pointer or stack
19301     pointer.  Use of this flag for other registers that have fixed
19302     pervasive roles in the machine's execution model produces
19303     disastrous results.
19304
19305     A different sort of disaster results from the use of this flag for
19306     a register in which function values may be returned.
19307
19308     This flag does not have a negative form, because it specifies a
19309     three-way choice.
19310
19311`-fpack-struct[=N]'
19312     Without a value specified, pack all structure members together
19313     without holes.  When a value is specified (which must be a small
19314     power of two), pack structure members according to this value,
19315     representing the maximum alignment (that is, objects with default
19316     alignment requirements larger than this are output potentially
19317     unaligned at the next fitting location.
19318
19319     *Warning:* the `-fpack-struct' switch causes GCC to generate code
19320     that is not binary compatible with code generated without that
19321     switch.  Additionally, it makes the code suboptimal.  Use it to
19322     conform to a non-default application binary interface.
19323
19324`-finstrument-functions'
19325     Generate instrumentation calls for entry and exit to functions.
19326     Just after function entry and just before function exit, the
19327     following profiling functions are called with the address of the
19328     current function and its call site.  (On some platforms,
19329     `__builtin_return_address' does not work beyond the current
19330     function, so the call site information may not be available to the
19331     profiling functions otherwise.)
19332
19333          void __cyg_profile_func_enter (void *this_fn,
19334                                         void *call_site);
19335          void __cyg_profile_func_exit  (void *this_fn,
19336                                         void *call_site);
19337
19338     The first argument is the address of the start of the current
19339     function, which may be looked up exactly in the symbol table.
19340
19341     This instrumentation is also done for functions expanded inline in
19342     other functions.  The profiling calls indicate where,
19343     conceptually, the inline function is entered and exited.  This
19344     means that addressable versions of such functions must be
19345     available.  If all your uses of a function are expanded inline,
19346     this may mean an additional expansion of code size.  If you use
19347     `extern inline' in your C code, an addressable version of such
19348     functions must be provided.  (This is normally the case anyway,
19349     but if you get lucky and the optimizer always expands the
19350     functions inline, you might have gotten away without providing
19351     static copies.)
19352
19353     A function may be given the attribute `no_instrument_function', in
19354     which case this instrumentation is not done.  This can be used, for
19355     example, for the profiling functions listed above, high-priority
19356     interrupt routines, and any functions from which the profiling
19357     functions cannot safely be called (perhaps signal handlers, if the
19358     profiling routines generate output or allocate memory).
19359
19360`-finstrument-functions-exclude-file-list=FILE,FILE,...'
19361     Set the list of functions that are excluded from instrumentation
19362     (see the description of `-finstrument-functions').  If the file
19363     that contains a function definition matches with one of FILE, then
19364     that function is not instrumented.  The match is done on
19365     substrings: if the FILE parameter is a substring of the file name,
19366     it is considered to be a match.
19367
19368     For example:
19369
19370          -finstrument-functions-exclude-file-list=/bits/stl,include/sys
19371
19372     excludes any inline function defined in files whose pathnames
19373     contain `/bits/stl' or `include/sys'.
19374
19375     If, for some reason, you want to include letter `','' in one of
19376     SYM, write `'\,''. For example,
19377     `-finstrument-functions-exclude-file-list='\,\,tmp'' (note the
19378     single quote surrounding the option).
19379
19380`-finstrument-functions-exclude-function-list=SYM,SYM,...'
19381     This is similar to `-finstrument-functions-exclude-file-list', but
19382     this option sets the list of function names to be excluded from
19383     instrumentation.  The function name to be matched is its
19384     user-visible name, such as `vector<int> blah(const vector<int>
19385     &)', not the internal mangled name (e.g.,
19386     `_Z4blahRSt6vectorIiSaIiEE').  The match is done on substrings: if
19387     the SYM parameter is a substring of the function name, it is
19388     considered to be a match.  For C99 and C++ extended identifiers,
19389     the function name must be given in UTF-8, not using universal
19390     character names.
19391
19392`-fstack-check'
19393     Generate code to verify that you do not go beyond the boundary of
19394     the stack.  You should specify this flag if you are running in an
19395     environment with multiple threads, but you only rarely need to
19396     specify it in a single-threaded environment since stack overflow
19397     is automatically detected on nearly all systems if there is only
19398     one stack.
19399
19400     Note that this switch does not actually cause checking to be done;
19401     the operating system or the language runtime must do that.  The
19402     switch causes generation of code to ensure that they see the stack
19403     being extended.
19404
19405     You can additionally specify a string parameter: `no' means no
19406     checking, `generic' means force the use of old-style checking,
19407     `specific' means use the best checking method and is equivalent to
19408     bare `-fstack-check'.
19409
19410     Old-style checking is a generic mechanism that requires no specific
19411     target support in the compiler but comes with the following
19412     drawbacks:
19413
19414       1. Modified allocation strategy for large objects: they are
19415          always allocated dynamically if their size exceeds a fixed
19416          threshold.
19417
19418       2. Fixed limit on the size of the static frame of functions:
19419          when it is topped by a particular function, stack checking is
19420          not reliable and a warning is issued by the compiler.
19421
19422       3. Inefficiency: because of both the modified allocation
19423          strategy and the generic implementation, code performance is
19424          hampered.
19425
19426     Note that old-style stack checking is also the fallback method for
19427     `specific' if no target support has been added in the compiler.
19428
19429`-fstack-limit-register=REG'
19430`-fstack-limit-symbol=SYM'
19431`-fno-stack-limit'
19432     Generate code to ensure that the stack does not grow beyond a
19433     certain value, either the value of a register or the address of a
19434     symbol.  If a larger stack is required, a signal is raised at run
19435     time.  For most targets, the signal is raised before the stack
19436     overruns the boundary, so it is possible to catch the signal
19437     without taking special precautions.
19438
19439     For instance, if the stack starts at absolute address `0x80000000'
19440     and grows downwards, you can use the flags
19441     `-fstack-limit-symbol=__stack_limit' and
19442     `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit
19443     of 128KB.  Note that this may only work with the GNU linker.
19444
19445`-fsplit-stack'
19446     Generate code to automatically split the stack before it overflows.
19447     The resulting program has a discontiguous stack which can only
19448     overflow if the program is unable to allocate any more memory.
19449     This is most useful when running threaded programs, as it is no
19450     longer necessary to calculate a good stack size to use for each
19451     thread.  This is currently only implemented for the i386 and
19452     x86_64 back ends running GNU/Linux.
19453
19454     When code compiled with `-fsplit-stack' calls code compiled
19455     without `-fsplit-stack', there may not be much stack space
19456     available for the latter code to run.  If compiling all code,
19457     including library code, with `-fsplit-stack' is not an option,
19458     then the linker can fix up these calls so that the code compiled
19459     without `-fsplit-stack' always has a large stack.  Support for
19460     this is implemented in the gold linker in GNU binutils release 2.21
19461     and later.
19462
19463`-fleading-underscore'
19464     This option and its counterpart, `-fno-leading-underscore',
19465     forcibly change the way C symbols are represented in the object
19466     file.  One use is to help link with legacy assembly code.
19467
19468     *Warning:* the `-fleading-underscore' switch causes GCC to
19469     generate code that is not binary compatible with code generated
19470     without that switch.  Use it to conform to a non-default
19471     application binary interface.  Not all targets provide complete
19472     support for this switch.
19473
19474`-ftls-model=MODEL'
19475     Alter the thread-local storage model to be used (*note
19476     Thread-Local::).  The MODEL argument should be one of
19477     `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'.
19478
19479     The default without `-fpic' is `initial-exec'; with `-fpic' the
19480     default is `global-dynamic'.
19481
19482`-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED'
19483     Set the default ELF image symbol visibility to the specified
19484     option--all symbols are marked with this unless overridden within
19485     the code.  Using this feature can very substantially improve
19486     linking and load times of shared object libraries, produce more
19487     optimized code, provide near-perfect API export and prevent symbol
19488     clashes.  It is *strongly* recommended that you use this in any
19489     shared objects you distribute.
19490
19491     Despite the nomenclature, `default' always means public; i.e.,
19492     available to be linked against from outside the shared object.
19493     `protected' and `internal' are pretty useless in real-world usage
19494     so the only other commonly used option is `hidden'.  The default
19495     if `-fvisibility' isn't specified is `default', i.e., make every
19496     symbol public--this causes the same behavior as previous versions
19497     of GCC.
19498
19499     A good explanation of the benefits offered by ensuring ELF symbols
19500     have the correct visibility is given by "How To Write Shared
19501     Libraries" by Ulrich Drepper (which can be found at
19502     `http://people.redhat.com/~drepper/')--however a superior solution
19503     made possible by this option to marking things hidden when the
19504     default is public is to make the default hidden and mark things
19505     public.  This is the norm with DLLs on Windows and with
19506     `-fvisibility=hidden' and `__attribute__
19507     ((visibility("default")))' instead of `__declspec(dllexport)' you
19508     get almost identical semantics with identical syntax.  This is a
19509     great boon to those working with cross-platform projects.
19510
19511     For those adding visibility support to existing code, you may find
19512     `#pragma GCC visibility' of use.  This works by you enclosing the
19513     declarations you wish to set visibility for with (for example)
19514     `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility
19515     pop'.  Bear in mind that symbol visibility should be viewed *as
19516     part of the API interface contract* and thus all new code should
19517     always specify visibility when it is not the default; i.e.,
19518     declarations only for use within the local DSO should *always* be
19519     marked explicitly as hidden as so to avoid PLT indirection
19520     overheads--making this abundantly clear also aids readability and
19521     self-documentation of the code.  Note that due to ISO C++
19522     specification requirements, `operator new' and `operator delete'
19523     must always be of default visibility.
19524
19525     Be aware that headers from outside your project, in particular
19526     system headers and headers from any other library you use, may not
19527     be expecting to be compiled with visibility other than the
19528     default.  You may need to explicitly say `#pragma GCC visibility
19529     push(default)' before including any such headers.
19530
19531     `extern' declarations are not affected by `-fvisibility', so a lot
19532     of code can be recompiled with `-fvisibility=hidden' with no
19533     modifications.  However, this means that calls to `extern'
19534     functions with no explicit visibility use the PLT, so it is more
19535     effective to use `__attribute ((visibility))' and/or `#pragma GCC
19536     visibility' to tell the compiler which `extern' declarations
19537     should be treated as hidden.
19538
19539     Note that `-fvisibility' does affect C++ vague linkage entities.
19540     This means that, for instance, an exception class that is be
19541     thrown between DSOs must be explicitly marked with default
19542     visibility so that the `type_info' nodes are unified between the
19543     DSOs.
19544
19545     An overview of these techniques, their benefits and how to use them
19546     is at `http://gcc.gnu.org/wiki/Visibility'.
19547
19548`-fstrict-volatile-bitfields'
19549     This option should be used if accesses to volatile bit-fields (or
19550     other structure fields, although the compiler usually honors those
19551     types anyway) should use a single access of the width of the
19552     field's type, aligned to a natural alignment if possible.  For
19553     example, targets with memory-mapped peripheral registers might
19554     require all such accesses to be 16 bits wide; with this flag you
19555     can declare all peripheral bit-fields as `unsigned short'
19556     (assuming short is 16 bits on these targets) to force GCC to use
19557     16-bit accesses instead of, perhaps, a more efficient 32-bit
19558     access.
19559
19560     If this option is disabled, the compiler uses the most efficient
19561     instruction.  In the previous example, that might be a 32-bit load
19562     instruction, even though that accesses bytes that do not contain
19563     any portion of the bit-field, or memory-mapped registers unrelated
19564     to the one being updated.
19565
19566     If the target requires strict alignment, and honoring the field
19567     type would require violating this alignment, a warning is issued.
19568     If the field has `packed' attribute, the access is done without
19569     honoring the field type.  If the field doesn't have `packed'
19570     attribute, the access is done honoring the field type.  In both
19571     cases, GCC assumes that the user knows something about the target
19572     hardware that it is unaware of.
19573
19574     The default value of this option is determined by the application
19575     binary interface for the target processor.
19576
19577`-fsync-libcalls'
19578     This option controls whether any out-of-line instance of the
19579     `__sync' family of functions may be used to implement the C++11
19580     `__atomic' family of functions.
19581
19582     The default value of this option is enabled, thus the only useful
19583     form of the option is `-fno-sync-libcalls'.  This option is used in
19584     the implementation of the `libatomic' runtime library.
19585
19586
19587
19588File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Code Gen Options,  Up: Invoking GCC
19589
195903.19 Environment Variables Affecting GCC
19591========================================
19592
19593This section describes several environment variables that affect how GCC
19594operates.  Some of them work by specifying directories or prefixes to
19595use when searching for various kinds of files.  Some are used to
19596specify other aspects of the compilation environment.
19597
19598 Note that you can also specify places to search using options such as
19599`-B', `-I' and `-L' (*note Directory Options::).  These take precedence
19600over places specified using environment variables, which in turn take
19601precedence over those specified by the configuration of GCC.  *Note
19602Controlling the Compilation Driver `gcc': (gccint)Driver.
19603
19604`LANG'
19605`LC_CTYPE'
19606`LC_MESSAGES'
19607`LC_ALL'
19608     These environment variables control the way that GCC uses
19609     localization information which allows GCC to work with different
19610     national conventions.  GCC inspects the locale categories
19611     `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so.
19612     These locale categories can be set to any value supported by your
19613     installation.  A typical value is `en_GB.UTF-8' for English in the
19614     United Kingdom encoded in UTF-8.
19615
19616     The `LC_CTYPE' environment variable specifies character
19617     classification.  GCC uses it to determine the character boundaries
19618     in a string; this is needed for some multibyte encodings that
19619     contain quote and escape characters that are otherwise interpreted
19620     as a string end or escape.
19621
19622     The `LC_MESSAGES' environment variable specifies the language to
19623     use in diagnostic messages.
19624
19625     If the `LC_ALL' environment variable is set, it overrides the value
19626     of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and
19627     `LC_MESSAGES' default to the value of the `LANG' environment
19628     variable.  If none of these variables are set, GCC defaults to
19629     traditional C English behavior.
19630
19631`TMPDIR'
19632     If `TMPDIR' is set, it specifies the directory to use for temporary
19633     files.  GCC uses temporary files to hold the output of one stage of
19634     compilation which is to be used as input to the next stage: for
19635     example, the output of the preprocessor, which is the input to the
19636     compiler proper.
19637
19638`GCC_COMPARE_DEBUG'
19639     Setting `GCC_COMPARE_DEBUG' is nearly equivalent to passing
19640     `-fcompare-debug' to the compiler driver.  See the documentation
19641     of this option for more details.
19642
19643`GCC_EXEC_PREFIX'
19644     If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
19645     names of the subprograms executed by the compiler.  No slash is
19646     added when this prefix is combined with the name of a subprogram,
19647     but you can specify a prefix that ends with a slash if you wish.
19648
19649     If `GCC_EXEC_PREFIX' is not set, GCC attempts to figure out an
19650     appropriate prefix to use based on the pathname it is invoked with.
19651
19652     If GCC cannot find the subprogram using the specified prefix, it
19653     tries looking in the usual places for the subprogram.
19654
19655     The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where
19656     PREFIX is the prefix to the installed compiler. In many cases
19657     PREFIX is the value of `prefix' when you ran the `configure'
19658     script.
19659
19660     Other prefixes specified with `-B' take precedence over this
19661     prefix.
19662
19663     This prefix is also used for finding files such as `crt0.o' that
19664     are used for linking.
19665
19666     In addition, the prefix is used in an unusual way in finding the
19667     directories to search for header files.  For each of the standard
19668     directories whose name normally begins with `/usr/local/lib/gcc'
19669     (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries
19670     replacing that beginning with the specified prefix to produce an
19671     alternate directory name.  Thus, with `-Bfoo/', GCC searches
19672     `foo/bar' just before it searches the standard directory
19673     `/usr/local/lib/bar'.  If a standard directory begins with the
19674     configured PREFIX then the value of PREFIX is replaced by
19675     `GCC_EXEC_PREFIX' when looking for header files.
19676
19677`COMPILER_PATH'
19678     The value of `COMPILER_PATH' is a colon-separated list of
19679     directories, much like `PATH'.  GCC tries the directories thus
19680     specified when searching for subprograms, if it can't find the
19681     subprograms using `GCC_EXEC_PREFIX'.
19682
19683`LIBRARY_PATH'
19684     The value of `LIBRARY_PATH' is a colon-separated list of
19685     directories, much like `PATH'.  When configured as a native
19686     compiler, GCC tries the directories thus specified when searching
19687     for special linker files, if it can't find them using
19688     `GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
19689     when searching for ordinary libraries for the `-l' option (but
19690     directories specified with `-L' come first).
19691
19692`LANG'
19693     This variable is used to pass locale information to the compiler.
19694     One way in which this information is used is to determine the
19695     character set to be used when character literals, string literals
19696     and comments are parsed in C and C++.  When the compiler is
19697     configured to allow multibyte characters, the following values for
19698     `LANG' are recognized:
19699
19700    `C-JIS'
19701          Recognize JIS characters.
19702
19703    `C-SJIS'
19704          Recognize SJIS characters.
19705
19706    `C-EUCJP'
19707          Recognize EUCJP characters.
19708
19709     If `LANG' is not defined, or if it has some other value, then the
19710     compiler uses `mblen' and `mbtowc' as defined by the default
19711     locale to recognize and translate multibyte characters.
19712
19713Some additional environment variables affect the behavior of the
19714preprocessor.
19715
19716`CPATH'
19717`C_INCLUDE_PATH'
19718`CPLUS_INCLUDE_PATH'
19719`OBJC_INCLUDE_PATH'
19720     Each variable's value is a list of directories separated by a
19721     special character, much like `PATH', in which to look for header
19722     files.  The special character, `PATH_SEPARATOR', is
19723     target-dependent and determined at GCC build time.  For Microsoft
19724     Windows-based targets it is a semicolon, and for almost all other
19725     targets it is a colon.
19726
19727     `CPATH' specifies a list of directories to be searched as if
19728     specified with `-I', but after any paths given with `-I' options
19729     on the command line.  This environment variable is used regardless
19730     of which language is being preprocessed.
19731
19732     The remaining environment variables apply only when preprocessing
19733     the particular language indicated.  Each specifies a list of
19734     directories to be searched as if specified with `-isystem', but
19735     after any paths given with `-isystem' options on the command line.
19736
19737     In all these variables, an empty element instructs the compiler to
19738     search its current working directory.  Empty elements can appear
19739     at the beginning or end of a path.  For instance, if the value of
19740     `CPATH' is `:/special/include', that has the same effect as
19741     `-I. -I/special/include'.
19742
19743`DEPENDENCIES_OUTPUT'
19744     If this variable is set, its value specifies how to output
19745     dependencies for Make based on the non-system header files
19746     processed by the compiler.  System header files are ignored in the
19747     dependency output.
19748
19749     The value of `DEPENDENCIES_OUTPUT' can be just a file name, in
19750     which case the Make rules are written to that file, guessing the
19751     target name from the source file name.  Or the value can have the
19752     form `FILE TARGET', in which case the rules are written to file
19753     FILE using TARGET as the target name.
19754
19755     In other words, this environment variable is equivalent to
19756     combining the options `-MM' and `-MF' (*note Preprocessor
19757     Options::), with an optional `-MT' switch too.
19758
19759`SUNPRO_DEPENDENCIES'
19760     This variable is the same as `DEPENDENCIES_OUTPUT' (see above),
19761     except that system header files are not ignored, so it implies
19762     `-M' rather than `-MM'.  However, the dependence on the main input
19763     file is omitted.  *Note Preprocessor Options::.
19764
19765
19766File: gcc.info,  Node: Precompiled Headers,  Prev: Environment Variables,  Up: Invoking GCC
19767
197683.20 Using Precompiled Headers
19769==============================
19770
19771Often large projects have many header files that are included in every
19772source file.  The time the compiler takes to process these header files
19773over and over again can account for nearly all of the time required to
19774build the project.  To make builds faster, GCC allows you to
19775"precompile" a header file.
19776
19777 To create a precompiled header file, simply compile it as you would any
19778other file, if necessary using the `-x' option to make the driver treat
19779it as a C or C++ header file.  You may want to use a tool like `make'
19780to keep the precompiled header up-to-date when the headers it contains
19781change.
19782
19783 A precompiled header file is searched for when `#include' is seen in
19784the compilation.  As it searches for the included file (*note Search
19785Path: (cpp)Search Path.) the compiler looks for a precompiled header in
19786each directory just before it looks for the include file in that
19787directory.  The name searched for is the name specified in the
19788`#include' with `.gch' appended.  If the precompiled header file can't
19789be used, it is ignored.
19790
19791 For instance, if you have `#include "all.h"', and you have `all.h.gch'
19792in the same directory as `all.h', then the precompiled header file is
19793used if possible, and the original header is used otherwise.
19794
19795 Alternatively, you might decide to put the precompiled header file in a
19796directory and use `-I' to ensure that directory is searched before (or
19797instead of) the directory containing the original header.  Then, if you
19798want to check that the precompiled header file is always used, you can
19799put a file of the same name as the original header in this directory
19800containing an `#error' command.
19801
19802 This also works with `-include'.  So yet another way to use
19803precompiled headers, good for projects not designed with precompiled
19804header files in mind, is to simply take most of the header files used by
19805a project, include them from another header file, precompile that header
19806file, and `-include' the precompiled header.  If the header files have
19807guards against multiple inclusion, they are skipped because they've
19808already been included (in the precompiled header).
19809
19810 If you need to precompile the same header file for different
19811languages, targets, or compiler options, you can instead make a
19812_directory_ named like `all.h.gch', and put each precompiled header in
19813the directory, perhaps using `-o'.  It doesn't matter what you call the
19814files in the directory; every precompiled header in the directory is
19815considered.  The first precompiled header encountered in the directory
19816that is valid for this compilation is used; they're searched in no
19817particular order.
19818
19819 There are many other possibilities, limited only by your imagination,
19820good sense, and the constraints of your build system.
19821
19822 A precompiled header file can be used only when these conditions apply:
19823
19824   * Only one precompiled header can be used in a particular
19825     compilation.
19826
19827   * A precompiled header can't be used once the first C token is seen.
19828     You can have preprocessor directives before a precompiled header;
19829     you cannot include a precompiled header from inside another header.
19830
19831   * The precompiled header file must be produced for the same language
19832     as the current compilation.  You can't use a C precompiled header
19833     for a C++ compilation.
19834
19835   * The precompiled header file must have been produced by the same
19836     compiler binary as the current compilation is using.
19837
19838   * Any macros defined before the precompiled header is included must
19839     either be defined in the same way as when the precompiled header
19840     was generated, or must not affect the precompiled header, which
19841     usually means that they don't appear in the precompiled header at
19842     all.
19843
19844     The `-D' option is one way to define a macro before a precompiled
19845     header is included; using a `#define' can also do it.  There are
19846     also some options that define macros implicitly, like `-O' and
19847     `-Wdeprecated'; the same rule applies to macros defined this way.
19848
19849   * If debugging information is output when using the precompiled
19850     header, using `-g' or similar, the same kind of debugging
19851     information must have been output when building the precompiled
19852     header.  However, a precompiled header built using `-g' can be
19853     used in a compilation when no debugging information is being
19854     output.
19855
19856   * The same `-m' options must generally be used when building and
19857     using the precompiled header.  *Note Submodel Options::, for any
19858     cases where this rule is relaxed.
19859
19860   * Each of the following options must be the same when building and
19861     using the precompiled header:
19862
19863          -fexceptions
19864
19865   * Some other command-line options starting with `-f', `-p', or `-O'
19866     must be defined in the same way as when the precompiled header was
19867     generated.  At present, it's not clear which options are safe to
19868     change and which are not; the safest choice is to use exactly the
19869     same options when generating and using the precompiled header.
19870     The following are known to be safe:
19871
19872          -fmessage-length=  -fpreprocessed  -fsched-interblock
19873          -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous
19874          -fsched-verbose=NUMBER  -fschedule-insns  -fvisibility=
19875          -pedantic-errors
19876
19877
19878 For all of these except the last, the compiler automatically ignores
19879the precompiled header if the conditions aren't met.  If you find an
19880option combination that doesn't work and doesn't cause the precompiled
19881header to be ignored, please consider filing a bug report, see *note
19882Bugs::.
19883
19884 If you do use differing options when generating and using the
19885precompiled header, the actual behavior is a mixture of the behavior
19886for the options.  For instance, if you use `-g' to generate the
19887precompiled header but not when using it, you may or may not get
19888debugging information for routines in the precompiled header.
19889
19890
19891File: gcc.info,  Node: C Implementation,  Next: C++ Implementation,  Prev: Invoking GCC,  Up: Top
19892
198934 C Implementation-defined behavior
19894***********************************
19895
19896A conforming implementation of ISO C is required to document its choice
19897of behavior in each of the areas that are designated "implementation
19898defined".  The following lists all such areas, along with the section
19899numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards.
19900Some areas are only implementation-defined in one version of the
19901standard.
19902
19903 Some choices depend on the externally determined ABI for the platform
19904(including standard character encodings) which GCC follows; these are
19905listed as "determined by ABI" below.  *Note Binary Compatibility:
19906Compatibility, and `http://gcc.gnu.org/readings.html'.  Some choices
19907are documented in the preprocessor manual.  *Note
19908Implementation-defined behavior: (cpp)Implementation-defined behavior.
19909Some choices are made by the library and operating system (or other
19910environment when compiling for a freestanding environment); refer to
19911their documentation for details.
19912
19913* Menu:
19914
19915* Translation implementation::
19916* Environment implementation::
19917* Identifiers implementation::
19918* Characters implementation::
19919* Integers implementation::
19920* Floating point implementation::
19921* Arrays and pointers implementation::
19922* Hints implementation::
19923* Structures unions enumerations and bit-fields implementation::
19924* Qualifiers implementation::
19925* Declarators implementation::
19926* Statements implementation::
19927* Preprocessing directives implementation::
19928* Library functions implementation::
19929* Architecture implementation::
19930* Locale-specific behavior implementation::
19931
19932
19933File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation
19934
199354.1 Translation
19936===============
19937
19938   * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99
19939     5.1.1.3).'
19940
19941     Diagnostics consist of all the output sent to stderr by GCC.
19942
19943   * `Whether each nonempty sequence of white-space characters other
19944     than new-line is retained or replaced by one space character in
19945     translation phase 3 (C90 and C99 5.1.1.2).'
19946
19947     *Note Implementation-defined behavior: (cpp)Implementation-defined
19948     behavior.
19949
19950
19951
19952File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation
19953
199544.2 Environment
19955===============
19956
19957The behavior of most of these points are dependent on the implementation
19958of the C library, and are not defined by GCC itself.
19959
19960   * `The mapping between physical source file multibyte characters and
19961     the source character set in translation phase 1 (C90 and C99
19962     5.1.1.2).'
19963
19964     *Note Implementation-defined behavior: (cpp)Implementation-defined
19965     behavior.
19966
19967
19968
19969File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation
19970
199714.3 Identifiers
19972===============
19973
19974   * `Which additional multibyte characters may appear in identifiers
19975     and their correspondence to universal character names (C99 6.4.2).'
19976
19977     *Note Implementation-defined behavior: (cpp)Implementation-defined
19978     behavior.
19979
19980   * `The number of significant initial characters in an identifier
19981     (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).'
19982
19983     For internal names, all characters are significant.  For external
19984     names, the number of significant characters are defined by the
19985     linker; for almost all targets, all characters are significant.
19986
19987   * `Whether case distinctions are significant in an identifier with
19988     external linkage (C90 6.1.2).'
19989
19990     This is a property of the linker.  C99 requires that case
19991     distinctions are always significant in identifiers with external
19992     linkage and systems without this property are not supported by GCC.
19993
19994
19995
19996File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation
19997
199984.4 Characters
19999==============
20000
20001   * `The number of bits in a byte (C90 3.4, C99 3.6).'
20002
20003     Determined by ABI.
20004
20005   * `The values of the members of the execution character set (C90 and
20006     C99 5.2.1).'
20007
20008     Determined by ABI.
20009
20010   * `The unique value of the member of the execution character set
20011     produced for each of the standard alphabetic escape sequences (C90
20012     and C99 5.2.2).'
20013
20014     Determined by ABI.
20015
20016   * `The value of a `char' object into which has been stored any
20017     character other than a member of the basic execution character set
20018     (C90 6.1.2.5, C99 6.2.5).'
20019
20020     Determined by ABI.
20021
20022   * `Which of `signed char' or `unsigned char' has the same range,
20023     representation, and behavior as "plain" `char' (C90 6.1.2.5, C90
20024     6.2.1.1, C99 6.2.5, C99 6.3.1.1).'
20025
20026     Determined by ABI.  The options `-funsigned-char' and
20027     `-fsigned-char' change the default.  *Note Options Controlling C
20028     Dialect: C Dialect Options.
20029
20030   * `The mapping of members of the source character set (in character
20031     constants and string literals) to members of the execution
20032     character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).'
20033
20034     Determined by ABI.
20035
20036   * `The value of an integer character constant containing more than
20037     one character or containing a character or escape sequence that
20038     does not map to a single-byte execution character (C90 6.1.3.4,
20039     C99 6.4.4.4).'
20040
20041     *Note Implementation-defined behavior: (cpp)Implementation-defined
20042     behavior.
20043
20044   * `The value of a wide character constant containing more than one
20045     multibyte character, or containing a multibyte character or escape
20046     sequence not represented in the extended execution character set
20047     (C90 6.1.3.4, C99 6.4.4.4).'
20048
20049     *Note Implementation-defined behavior: (cpp)Implementation-defined
20050     behavior.
20051
20052   * `The current locale used to convert a wide character constant
20053     consisting of a single multibyte character that maps to a member
20054     of the extended execution character set into a corresponding wide
20055     character code (C90 6.1.3.4, C99 6.4.4.4).'
20056
20057     *Note Implementation-defined behavior: (cpp)Implementation-defined
20058     behavior.
20059
20060   * `The current locale used to convert a wide string literal into
20061     corresponding wide character codes (C90 6.1.4, C99 6.4.5).'
20062
20063     *Note Implementation-defined behavior: (cpp)Implementation-defined
20064     behavior.
20065
20066   * `The value of a string literal containing a multibyte character or
20067     escape sequence not represented in the execution character set
20068     (C90 6.1.4, C99 6.4.5).'
20069
20070     *Note Implementation-defined behavior: (cpp)Implementation-defined
20071     behavior.
20072
20073
20074File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation
20075
200764.5 Integers
20077============
20078
20079   * `Any extended integer types that exist in the implementation (C99
20080     6.2.5).'
20081
20082     GCC does not support any extended integer types.
20083
20084   * `Whether signed integer types are represented using sign and
20085     magnitude, two's complement, or one's complement, and whether the
20086     extraordinary value is a trap representation or an ordinary value
20087     (C99 6.2.6.2).'
20088
20089     GCC supports only two's complement integer types, and all bit
20090     patterns are ordinary values.
20091
20092   * `The rank of any extended integer type relative to another extended
20093     integer type with the same precision (C99 6.3.1.1).'
20094
20095     GCC does not support any extended integer types.
20096
20097   * `The result of, or the signal raised by, converting an integer to a
20098     signed integer type when the value cannot be represented in an
20099     object of that type (C90 6.2.1.2, C99 6.3.1.3).'
20100
20101     For conversion to a type of width N, the value is reduced modulo
20102     2^N to be within range of the type; no signal is raised.
20103
20104   * `The results of some bitwise operations on signed integers (C90
20105     6.3, C99 6.5).'
20106
20107     Bitwise operators act on the representation of the value including
20108     both the sign and value bits, where the sign bit is considered
20109     immediately above the highest-value value bit.  Signed `>>' acts
20110     on negative numbers by sign extension.
20111
20112     GCC does not use the latitude given in C99 only to treat certain
20113     aspects of signed `<<' as undefined, but this is subject to change.
20114
20115   * `The sign of the remainder on integer division (C90 6.3.5).'
20116
20117     GCC always follows the C99 requirement that the result of division
20118     is truncated towards zero.
20119
20120
20121
20122File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation
20123
201244.6 Floating point
20125==================
20126
20127   * `The accuracy of the floating-point operations and of the library
20128     functions in `<math.h>' and `<complex.h>' that return
20129     floating-point results (C90 and C99 5.2.4.2.2).'
20130
20131     The accuracy is unknown.
20132
20133   * `The rounding behaviors characterized by non-standard values of
20134     `FLT_ROUNDS'  (C90 and C99 5.2.4.2.2).'
20135
20136     GCC does not use such values.
20137
20138   * `The evaluation methods characterized by non-standard negative
20139     values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).'
20140
20141     GCC does not use such values.
20142
20143   * `The direction of rounding when an integer is converted to a
20144     floating-point number that cannot exactly represent the original
20145     value (C90 6.2.1.3, C99 6.3.1.4).'
20146
20147     C99 Annex F is followed.
20148
20149   * `The direction of rounding when a floating-point number is
20150     converted to a narrower floating-point number (C90 6.2.1.4, C99
20151     6.3.1.5).'
20152
20153     C99 Annex F is followed.
20154
20155   * `How the nearest representable value or the larger or smaller
20156     representable value immediately adjacent to the nearest
20157     representable value is chosen for certain floating constants (C90
20158     6.1.3.1, C99 6.4.4.2).'
20159
20160     C99 Annex F is followed.
20161
20162   * `Whether and how floating expressions are contracted when not
20163     disallowed by the `FP_CONTRACT' pragma (C99 6.5).'
20164
20165     Expressions are currently only contracted if
20166     `-funsafe-math-optimizations' or `-ffast-math' are used.  This is
20167     subject to change.
20168
20169   * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).'
20170
20171     This pragma is not implemented, but the default is to "off" unless
20172     `-frounding-math' is used in which case it is "on".
20173
20174   * `Additional floating-point exceptions, rounding modes,
20175     environments, and classifications, and their macro names (C99 7.6,
20176     C99 7.12).'
20177
20178     This is dependent on the implementation of the C library, and is
20179     not defined by GCC itself.
20180
20181   * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).'
20182
20183     This pragma is not implemented.  Expressions are currently only
20184     contracted if `-funsafe-math-optimizations' or `-ffast-math' are
20185     used.  This is subject to change.
20186
20187   * `Whether the "inexact" floating-point exception can be raised when
20188     the rounded result actually does equal the mathematical result in
20189     an IEC 60559 conformant implementation (C99 F.9).'
20190
20191     This is dependent on the implementation of the C library, and is
20192     not defined by GCC itself.
20193
20194   * `Whether the "underflow" (and "inexact") floating-point exception
20195     can be raised when a result is tiny but not inexact in an IEC
20196     60559 conformant implementation (C99 F.9).'
20197
20198     This is dependent on the implementation of the C library, and is
20199     not defined by GCC itself.
20200
20201
20202
20203File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation
20204
202054.7 Arrays and pointers
20206=======================
20207
20208   * `The result of converting a pointer to an integer or vice versa
20209     (C90 6.3.4, C99 6.3.2.3).'
20210
20211     A cast from pointer to integer discards most-significant bits if
20212     the pointer representation is larger than the integer type,
20213     sign-extends(1) if the pointer representation is smaller than the
20214     integer type, otherwise the bits are unchanged.
20215
20216     A cast from integer to pointer discards most-significant bits if
20217     the pointer representation is smaller than the integer type,
20218     extends according to the signedness of the integer type if the
20219     pointer representation is larger than the integer type, otherwise
20220     the bits are unchanged.
20221
20222     When casting from pointer to integer and back again, the resulting
20223     pointer must reference the same object as the original pointer,
20224     otherwise the behavior is undefined.  That is, one may not use
20225     integer arithmetic to avoid the undefined behavior of pointer
20226     arithmetic as proscribed in C99 6.5.6/8.
20227
20228   * `The size of the result of subtracting two pointers to elements of
20229     the same array (C90 6.3.6, C99 6.5.6).'
20230
20231     The value is as specified in the standard and the type is
20232     determined by the ABI.
20233
20234
20235 ---------- Footnotes ----------
20236
20237 (1) Future versions of GCC may zero-extend, or use a target-defined
20238`ptr_extend' pattern.  Do not rely on sign extension.
20239
20240
20241File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
20242
202434.8 Hints
20244=========
20245
20246   * `The extent to which suggestions made by using the `register'
20247     storage-class specifier are effective (C90 6.5.1, C99 6.7.1).'
20248
20249     The `register' specifier affects code generation only in these
20250     ways:
20251
20252        * When used as part of the register variable extension, see
20253          *note Explicit Reg Vars::.
20254
20255        * When `-O0' is in use, the compiler allocates distinct stack
20256          memory for all variables that do not have the `register'
20257          storage-class specifier; if `register' is specified, the
20258          variable may have a shorter lifespan than the code would
20259          indicate and may never be placed in memory.
20260
20261        * On some rare x86 targets, `setjmp' doesn't save the registers
20262          in all circumstances.  In those cases, GCC doesn't allocate
20263          any variables in registers unless they are marked `register'.
20264
20265
20266   * `The extent to which suggestions made by using the inline function
20267     specifier are effective (C99 6.7.4).'
20268
20269     GCC will not inline any functions if the `-fno-inline' option is
20270     used or if `-O0' is used.  Otherwise, GCC may still be unable to
20271     inline a function for many reasons; the `-Winline' option may be
20272     used to determine if a function has not been inlined and why not.
20273
20274
20275
20276File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation
20277
202784.9 Structures, unions, enumerations, and bit-fields
20279====================================================
20280
20281   * `A member of a union object is accessed using a member of a
20282     different type (C90 6.3.2.3).'
20283
20284     The relevant bytes of the representation of the object are treated
20285     as an object of the type used for the access.  *Note
20286     Type-punning::.  This may be a trap representation.
20287
20288   * `Whether a "plain" `int' bit-field is treated as a `signed int'
20289     bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90
20290     6.5.2.1, C99 6.7.2, C99 6.7.2.1).'
20291
20292     By default it is treated as `signed int' but this may be changed
20293     by the `-funsigned-bitfields' option.
20294
20295   * `Allowable bit-field types other than `_Bool', `signed int', and
20296     `unsigned int' (C99 6.7.2.1).'
20297
20298     No other types are permitted in strictly conforming mode.
20299
20300   * `Whether a bit-field can straddle a storage-unit boundary (C90
20301     6.5.2.1, C99 6.7.2.1).'
20302
20303     Determined by ABI.
20304
20305   * `The order of allocation of bit-fields within a unit (C90 6.5.2.1,
20306     C99 6.7.2.1).'
20307
20308     Determined by ABI.
20309
20310   * `The alignment of non-bit-field members of structures (C90
20311     6.5.2.1, C99 6.7.2.1).'
20312
20313     Determined by ABI.
20314
20315   * `The integer type compatible with each enumerated type (C90
20316     6.5.2.2, C99 6.7.2.2).'
20317
20318     Normally, the type is `unsigned int' if there are no negative
20319     values in the enumeration, otherwise `int'.  If `-fshort-enums' is
20320     specified, then if there are negative values it is the first of
20321     `signed char', `short' and `int' that can represent all the
20322     values, otherwise it is the first of `unsigned char', `unsigned
20323     short' and `unsigned int' that can represent all the values.
20324
20325     On some targets, `-fshort-enums' is the default; this is
20326     determined by the ABI.
20327
20328
20329
20330File: gcc.info,  Node: Qualifiers implementation,  Next: Declarators implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation
20331
203324.10 Qualifiers
20333===============
20334
20335   * `What constitutes an access to an object that has
20336     volatile-qualified type (C90 6.5.3, C99 6.7.3).'
20337
20338     Such an object is normally accessed by pointers and used for
20339     accessing hardware.  In most expressions, it is intuitively
20340     obvious what is a read and what is a write.  For example
20341
20342          volatile int *dst = SOMEVALUE;
20343          volatile int *src = SOMEOTHERVALUE;
20344          *dst = *src;
20345
20346     will cause a read of the volatile object pointed to by SRC and
20347     store the value into the volatile object pointed to by DST.  There
20348     is no guarantee that these reads and writes are atomic, especially
20349     for objects larger than `int'.
20350
20351     However, if the volatile storage is not being modified, and the
20352     value of the volatile storage is not used, then the situation is
20353     less obvious.  For example
20354
20355          volatile int *src = SOMEVALUE;
20356          *src;
20357
20358     According to the C standard, such an expression is an rvalue whose
20359     type is the unqualified version of its original type, i.e. `int'.
20360     Whether GCC interprets this as a read of the volatile object being
20361     pointed to or only as a request to evaluate the expression for its
20362     side-effects depends on this type.
20363
20364     If it is a scalar type, or on most targets an aggregate type whose
20365     only member object is of a scalar type, or a union type whose
20366     member objects are of scalar types, the expression is interpreted
20367     by GCC as a read of the volatile object; in the other cases, the
20368     expression is only evaluated for its side-effects.
20369
20370
20371
20372File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation
20373
203744.11 Declarators
20375================
20376
20377   * `The maximum number of declarators that may modify an arithmetic,
20378     structure or union type (C90 6.5.4).'
20379
20380     GCC is only limited by available memory.
20381
20382
20383
20384File: gcc.info,  Node: Statements implementation,  Next: Preprocessing directives implementation,  Prev: Declarators implementation,  Up: C Implementation
20385
203864.12 Statements
20387===============
20388
20389   * `The maximum number of `case' values in a `switch' statement (C90
20390     6.6.4.2).'
20391
20392     GCC is only limited by available memory.
20393
20394
20395
20396File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Statements implementation,  Up: C Implementation
20397
203984.13 Preprocessing directives
20399=============================
20400
20401*Note Implementation-defined behavior: (cpp)Implementation-defined
20402behavior, for details of these aspects of implementation-defined
20403behavior.
20404
20405   * `How sequences in both forms of header names are mapped to headers
20406     or external source file names (C90 6.1.7, C99 6.4.7).'
20407
20408   * `Whether the value of a character constant in a constant expression
20409     that controls conditional inclusion matches the value of the same
20410     character constant in the execution character set (C90 6.8.1, C99
20411     6.10.1).'
20412
20413   * `Whether the value of a single-character character constant in a
20414     constant expression that controls conditional inclusion may have a
20415     negative value (C90 6.8.1, C99 6.10.1).'
20416
20417   * `The places that are searched for an included `<>' delimited
20418     header, and how the places are specified or the header is
20419     identified (C90 6.8.2, C99 6.10.2).'
20420
20421   * `How the named source file is searched for in an included `""'
20422     delimited header (C90 6.8.2, C99 6.10.2).'
20423
20424   * `The method by which preprocessing tokens (possibly resulting from
20425     macro expansion) in a `#include' directive are combined into a
20426     header name (C90 6.8.2, C99 6.10.2).'
20427
20428   * `The nesting limit for `#include' processing (C90 6.8.2, C99
20429     6.10.2).'
20430
20431   * `Whether the `#' operator inserts a `\' character before the `\'
20432     character that begins a universal character name in a character
20433     constant or string literal (C99 6.10.3.2).'
20434
20435   * `The behavior on each recognized non-`STDC #pragma' directive (C90
20436     6.8.6, C99 6.10.6).'
20437
20438     *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by
20439     GCC on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
20440     details of target-specific pragmas.
20441
20442   * `The definitions for `__DATE__' and `__TIME__' when respectively,
20443     the date and time of translation are not available (C90 6.8.8, C99
20444     6.10.8).'
20445
20446
20447
20448File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
20449
204504.14 Library functions
20451======================
20452
20453The behavior of most of these points are dependent on the implementation
20454of the C library, and are not defined by GCC itself.
20455
20456   * `The null pointer constant to which the macro `NULL' expands (C90
20457     7.1.6, C99 7.17).'
20458
20459     In `<stddef.h>', `NULL' expands to `((void *)0)'.  GCC does not
20460     provide the other headers which define `NULL' and some library
20461     implementations may use other definitions in those headers.
20462
20463
20464
20465File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation
20466
204674.15 Architecture
20468=================
20469
20470   * `The values or expressions assigned to the macros specified in the
20471     headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90 and C99
20472     5.2.4.2, C99 7.18.2, C99 7.18.3).'
20473
20474     Determined by ABI.
20475
20476   * `The number, order, and encoding of bytes in any object (when not
20477     explicitly specified in this International Standard) (C99
20478     6.2.6.1).'
20479
20480     Determined by ABI.
20481
20482   * `The value of the result of the `sizeof' operator (C90 6.3.3.4,
20483     C99 6.5.3.4).'
20484
20485     Determined by ABI.
20486
20487
20488
20489File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation
20490
204914.16 Locale-specific behavior
20492=============================
20493
20494The behavior of these points are dependent on the implementation of the
20495C library, and are not defined by GCC itself.
20496
20497
20498File: gcc.info,  Node: C++ Implementation,  Next: C Extensions,  Prev: C Implementation,  Up: Top
20499
205005 C++ Implementation-defined behavior
20501*************************************
20502
20503A conforming implementation of ISO C++ is required to document its
20504choice of behavior in each of the areas that are designated
20505"implementation defined".  The following lists all such areas, along
20506with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC
2050714882:2003 standards.  Some areas are only implementation-defined in
20508one version of the standard.
20509
20510 Some choices depend on the externally determined ABI for the platform
20511(including standard character encodings) which GCC follows; these are
20512listed as "determined by ABI" below.  *Note Binary Compatibility:
20513Compatibility, and `http://gcc.gnu.org/readings.html'.  Some choices
20514are documented in the preprocessor manual.  *Note
20515Implementation-defined behavior: (cpp)Implementation-defined behavior.
20516Some choices are documented in the corresponding document for the C
20517language.  *Note C Implementation::.  Some choices are made by the
20518library and operating system (or other environment when compiling for a
20519freestanding environment); refer to their documentation for details.
20520
20521* Menu:
20522
20523* Conditionally-supported behavior::
20524* Exception handling::
20525
20526
20527File: gcc.info,  Node: Conditionally-supported behavior,  Next: Exception handling,  Up: C++ Implementation
20528
205295.1 Conditionally-supported behavior
20530====================================
20531
20532`Each implementation shall include documentation that identifies all
20533conditionally-supported constructs that it does not support (C++0x
205341.4).'
20535
20536   * `Whether an argument of class type with a non-trivial copy
20537     constructor or destructor can be passed to ... (C++0x 5.2.2).'
20538
20539     Such argument passing is not supported.
20540
20541
20542
20543File: gcc.info,  Node: Exception handling,  Prev: Conditionally-supported behavior,  Up: C++ Implementation
20544
205455.2 Exception handling
20546======================
20547
20548   * `In the situation where no matching handler is found, it is
20549     implementation-defined whether or not the stack is unwound before
20550     std::terminate() is called (C++98 15.5.1).'
20551
20552     The stack is not unwound before std::terminate is called.
20553
20554
20555
20556File: gcc.info,  Node: C Extensions,  Next: C++ Extensions,  Prev: C++ Implementation,  Up: Top
20557
205586 Extensions to the C Language Family
20559*************************************
20560
20561GNU C provides several language features not found in ISO standard C.
20562(The `-pedantic' option directs GCC to print a warning message if any
20563of these features is used.)  To test for the availability of these
20564features in conditional compilation, check for a predefined macro
20565`__GNUC__', which is always defined under GCC.
20566
20567 These extensions are available in C and Objective-C.  Most of them are
20568also available in C++.  *Note Extensions to the C++ Language: C++
20569Extensions, for extensions that apply _only_ to C++.
20570
20571 Some features that are in ISO C99 but not C90 or C++ are also, as
20572extensions, accepted by GCC in C90 mode and in C++.
20573
20574* Menu:
20575
20576* Statement Exprs::     Putting statements and declarations inside expressions.
20577* Local Labels::        Labels local to a block.
20578* Labels as Values::    Getting pointers to labels, and computed gotos.
20579* Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
20580* Constructing Calls::  Dispatching a call to another function.
20581* Typeof::              `typeof': referring to the type of an expression.
20582* Conditionals::        Omitting the middle operand of a `?:' expression.
20583* __int128::			128-bit integers---`__int128'.
20584* Long Long::           Double-word integers---`long long int'.
20585* Complex::             Data types for complex numbers.
20586* Floating Types::      Additional Floating Types.
20587* Half-Precision::      Half-Precision Floating Point.
20588* Decimal Float::       Decimal Floating Types.
20589* Hex Floats::          Hexadecimal floating-point constants.
20590* Fixed-Point::         Fixed-Point Types.
20591* Named Address Spaces::Named address spaces.
20592* Zero Length::         Zero-length arrays.
20593* Empty Structures::    Structures with no members.
20594* Variable Length::     Arrays whose length is computed at run time.
20595* Variadic Macros::     Macros with a variable number of arguments.
20596* Escaped Newlines::    Slightly looser rules for escaped newlines.
20597* Subscripting::        Any array can be subscripted, even if not an lvalue.
20598* Pointer Arith::       Arithmetic on `void'-pointers and function pointers.
20599* Initializers::        Non-constant initializers.
20600* Compound Literals::   Compound literals give structures, unions
20601                        or arrays as values.
20602* Designated Inits::    Labeling elements of initializers.
20603* Case Ranges::         `case 1 ... 9' and such.
20604* Cast to Union::       Casting to union type from any member of the union.
20605* Mixed Declarations::  Mixing declarations and code.
20606* Function Attributes:: Declaring that functions have no side effects,
20607                        or that they can never return.
20608* Attribute Syntax::    Formal syntax for attributes.
20609* Function Prototypes:: Prototype declarations and old-style definitions.
20610* C++ Comments::        C++ comments are recognized.
20611* Dollar Signs::        Dollar sign is allowed in identifiers.
20612* Character Escapes::   `\e' stands for the character <ESC>.
20613* Variable Attributes:: Specifying attributes of variables.
20614* Type Attributes::     Specifying attributes of types.
20615* Alignment::           Inquiring about the alignment of a type or variable.
20616* Inline::              Defining inline functions (as fast as macros).
20617* Volatiles::           What constitutes an access to a volatile object.
20618* Extended Asm::        Assembler instructions with C expressions as operands.
20619                        (With them you can define ``built-in'' functions.)
20620* Constraints::         Constraints for asm operands
20621* Asm Labels::          Specifying the assembler name to use for a C symbol.
20622* Explicit Reg Vars::   Defining variables residing in specified registers.
20623* Alternate Keywords::  `__const__', `__asm__', etc., for header files.
20624* Incomplete Enums::    `enum foo;', with details to follow.
20625* Function Names::      Printable strings which are the name of the current
20626                        function.
20627* Return Address::      Getting the return or frame address of a function.
20628* Vector Extensions::   Using vector instructions through built-in functions.
20629* Offsetof::            Special syntax for implementing `offsetof'.
20630* __sync Builtins::     Legacy built-in functions for atomic memory access.
20631* __atomic Builtins::   Atomic built-in functions with memory model.
20632* x86 specific memory model extensions for transactional memory:: x86 memory models.
20633* Object Size Checking:: Built-in functions for limited buffer overflow
20634                        checking.
20635* Other Builtins::      Other built-in functions.
20636* Target Builtins::     Built-in functions specific to particular targets.
20637* Target Format Checks:: Format checks specific to particular targets.
20638* Pragmas::             Pragmas accepted by GCC.
20639* Unnamed Fields::      Unnamed struct/union fields within structs/unions.
20640* Thread-Local::        Per-thread variables.
20641* Binary constants::    Binary constants using the `0b' prefix.
20642
20643
20644File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
20645
206466.1 Statements and Declarations in Expressions
20647==============================================
20648
20649A compound statement enclosed in parentheses may appear as an expression
20650in GNU C.  This allows you to use loops, switches, and local variables
20651within an expression.
20652
20653 Recall that a compound statement is a sequence of statements surrounded
20654by braces; in this construct, parentheses go around the braces.  For
20655example:
20656
20657     ({ int y = foo (); int z;
20658        if (y > 0) z = y;
20659        else z = - y;
20660        z; })
20661
20662is a valid (though slightly more complex than necessary) expression for
20663the absolute value of `foo ()'.
20664
20665 The last thing in the compound statement should be an expression
20666followed by a semicolon; the value of this subexpression serves as the
20667value of the entire construct.  (If you use some other kind of statement
20668last within the braces, the construct has type `void', and thus
20669effectively no value.)
20670
20671 This feature is especially useful in making macro definitions "safe"
20672(so that they evaluate each operand exactly once).  For example, the
20673"maximum" function is commonly defined as a macro in standard C as
20674follows:
20675
20676     #define max(a,b) ((a) > (b) ? (a) : (b))
20677
20678But this definition computes either A or B twice, with bad results if
20679the operand has side effects.  In GNU C, if you know the type of the
20680operands (here taken as `int'), you can define the macro safely as
20681follows:
20682
20683     #define maxint(a,b) \
20684       ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
20685
20686 Embedded statements are not allowed in constant expressions, such as
20687the value of an enumeration constant, the width of a bit-field, or the
20688initial value of a static variable.
20689
20690 If you don't know the type of the operand, you can still do this, but
20691you must use `typeof' (*note Typeof::).
20692
20693 In G++, the result value of a statement expression undergoes array and
20694function pointer decay, and is returned by value to the enclosing
20695expression.  For instance, if `A' is a class, then
20696
20697             A a;
20698
20699             ({a;}).Foo ()
20700
20701constructs a temporary `A' object to hold the result of the statement
20702expression, and that is used to invoke `Foo'.  Therefore the `this'
20703pointer observed by `Foo' is not the address of `a'.
20704
20705 In a statement expression, any temporaries created within a statement
20706are destroyed at that statement's end.  This makes statement
20707expressions inside macros slightly different from function calls.  In
20708the latter case temporaries introduced during argument evaluation are
20709destroyed at the end of the statement that includes the function call.
20710In the statement expression case they are destroyed during the
20711statement expression.  For instance,
20712
20713     #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
20714     template<typename T> T function(T a) { T b = a; return b + 3; }
20715
20716     void foo ()
20717     {
20718       macro (X ());
20719       function (X ());
20720     }
20721
20722has different places where temporaries are destroyed.  For the `macro'
20723case, the temporary `X' is destroyed just after the initialization of
20724`b'.  In the `function' case that temporary is destroyed when the
20725function returns.
20726
20727 These considerations mean that it is probably a bad idea to use
20728statement expressions of this form in header files that are designed to
20729work with C++.  (Note that some versions of the GNU C Library contained
20730header files using statement expressions that lead to precisely this
20731bug.)
20732
20733 Jumping into a statement expression with `goto' or using a `switch'
20734statement outside the statement expression with a `case' or `default'
20735label inside the statement expression is not permitted.  Jumping into a
20736statement expression with a computed `goto' (*note Labels as Values::)
20737has undefined behavior.  Jumping out of a statement expression is
20738permitted, but if the statement expression is part of a larger
20739expression then it is unspecified which other subexpressions of that
20740expression have been evaluated except where the language definition
20741requires certain subexpressions to be evaluated before or after the
20742statement expression.  In any case, as with a function call, the
20743evaluation of a statement expression is not interleaved with the
20744evaluation of other parts of the containing expression.  For example,
20745
20746       foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
20747
20748calls `foo' and `bar1' and does not call `baz' but may or may not call
20749`bar2'.  If `bar2' is called, it is called after `foo' and before
20750`bar1'.
20751
20752
20753File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
20754
207556.2 Locally Declared Labels
20756===========================
20757
20758GCC allows you to declare "local labels" in any nested block scope.  A
20759local label is just like an ordinary label, but you can only reference
20760it (with a `goto' statement, or by taking its address) within the block
20761in which it is declared.
20762
20763 A local label declaration looks like this:
20764
20765     __label__ LABEL;
20766
20767or
20768
20769     __label__ LABEL1, LABEL2, /* ... */;
20770
20771 Local label declarations must come at the beginning of the block,
20772before any ordinary declarations or statements.
20773
20774 The label declaration defines the label _name_, but does not define
20775the label itself.  You must do this in the usual way, with `LABEL:',
20776within the statements of the statement expression.
20777
20778 The local label feature is useful for complex macros.  If a macro
20779contains nested loops, a `goto' can be useful for breaking out of them.
20780However, an ordinary label whose scope is the whole function cannot be
20781used: if the macro can be expanded several times in one function, the
20782label is multiply defined in that function.  A local label avoids this
20783problem.  For example:
20784
20785     #define SEARCH(value, array, target)              \
20786     do {                                              \
20787       __label__ found;                                \
20788       typeof (target) _SEARCH_target = (target);      \
20789       typeof (*(array)) *_SEARCH_array = (array);     \
20790       int i, j;                                       \
20791       int value;                                      \
20792       for (i = 0; i < max; i++)                       \
20793         for (j = 0; j < max; j++)                     \
20794           if (_SEARCH_array[i][j] == _SEARCH_target)  \
20795             { (value) = i; goto found; }              \
20796       (value) = -1;                                   \
20797      found:;                                          \
20798     } while (0)
20799
20800 This could also be written using a statement expression:
20801
20802     #define SEARCH(array, target)                     \
20803     ({                                                \
20804       __label__ found;                                \
20805       typeof (target) _SEARCH_target = (target);      \
20806       typeof (*(array)) *_SEARCH_array = (array);     \
20807       int i, j;                                       \
20808       int value;                                      \
20809       for (i = 0; i < max; i++)                       \
20810         for (j = 0; j < max; j++)                     \
20811           if (_SEARCH_array[i][j] == _SEARCH_target)  \
20812             { value = i; goto found; }                \
20813       value = -1;                                     \
20814      found:                                           \
20815       value;                                          \
20816     })
20817
20818 Local label declarations also make the labels they declare visible to
20819nested functions, if there are any.  *Note Nested Functions::, for
20820details.
20821
20822
20823File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
20824
208256.3 Labels as Values
20826====================
20827
20828You can get the address of a label defined in the current function (or
20829a containing function) with the unary operator `&&'.  The value has
20830type `void *'.  This value is a constant and can be used wherever a
20831constant of that type is valid.  For example:
20832
20833     void *ptr;
20834     /* ... */
20835     ptr = &&foo;
20836
20837 To use these values, you need to be able to jump to one.  This is done
20838with the computed goto statement(1), `goto *EXP;'.  For example,
20839
20840     goto *ptr;
20841
20842Any expression of type `void *' is allowed.
20843
20844 One way of using these constants is in initializing a static array that
20845serves as a jump table:
20846
20847     static void *array[] = { &&foo, &&bar, &&hack };
20848
20849Then you can select a label with indexing, like this:
20850
20851     goto *array[i];
20852
20853Note that this does not check whether the subscript is in bounds--array
20854indexing in C never does that.
20855
20856 Such an array of label values serves a purpose much like that of the
20857`switch' statement.  The `switch' statement is cleaner, so use that
20858rather than an array unless the problem does not fit a `switch'
20859statement very well.
20860
20861 Another use of label values is in an interpreter for threaded code.
20862The labels within the interpreter function can be stored in the
20863threaded code for super-fast dispatching.
20864
20865 You may not use this mechanism to jump to code in a different function.
20866If you do that, totally unpredictable things happen.  The best way to
20867avoid this is to store the label address only in automatic variables and
20868never pass it as an argument.
20869
20870 An alternate way to write the above example is
20871
20872     static const int array[] = { &&foo - &&foo, &&bar - &&foo,
20873                                  &&hack - &&foo };
20874     goto *(&&foo + array[i]);
20875
20876This is more friendly to code living in shared libraries, as it reduces
20877the number of dynamic relocations that are needed, and by consequence,
20878allows the data to be read-only.  This alternative with label
20879differences is not supported for the AVR target, please use the first
20880approach for AVR programs.
20881
20882 The `&&foo' expressions for the same label might have different values
20883if the containing function is inlined or cloned.  If a program relies
20884on them being always the same,
20885`__attribute__((__noinline__,__noclone__))' should be used to prevent
20886inlining and cloning.  If `&&foo' is used in a static variable
20887initializer, inlining and cloning is forbidden.
20888
20889 ---------- Footnotes ----------
20890
20891 (1) The analogous feature in Fortran is called an assigned goto, but
20892that name seems inappropriate in C, where one can do more than simply
20893store label addresses in label variables.
20894
20895
20896File: gcc.info,  Node: Nested Functions,  Next: Constructing Calls,  Prev: Labels as Values,  Up: C Extensions
20897
208986.4 Nested Functions
20899====================
20900
20901A "nested function" is a function defined inside another function.
20902Nested functions are supported as an extension in GNU C, but are not
20903supported by GNU C++.
20904
20905 The nested function's name is local to the block where it is defined.
20906For example, here we define a nested function named `square', and call
20907it twice:
20908
20909     foo (double a, double b)
20910     {
20911       double square (double z) { return z * z; }
20912
20913       return square (a) + square (b);
20914     }
20915
20916 The nested function can access all the variables of the containing
20917function that are visible at the point of its definition.  This is
20918called "lexical scoping".  For example, here we show a nested function
20919which uses an inherited variable named `offset':
20920
20921     bar (int *array, int offset, int size)
20922     {
20923       int access (int *array, int index)
20924         { return array[index + offset]; }
20925       int i;
20926       /* ... */
20927       for (i = 0; i < size; i++)
20928         /* ... */ access (array, i) /* ... */
20929     }
20930
20931 Nested function definitions are permitted within functions in the
20932places where variable definitions are allowed; that is, in any block,
20933mixed with the other declarations and statements in the block.
20934
20935 It is possible to call the nested function from outside the scope of
20936its name by storing its address or passing the address to another
20937function:
20938
20939     hack (int *array, int size)
20940     {
20941       void store (int index, int value)
20942         { array[index] = value; }
20943
20944       intermediate (store, size);
20945     }
20946
20947 Here, the function `intermediate' receives the address of `store' as
20948an argument.  If `intermediate' calls `store', the arguments given to
20949`store' are used to store into `array'.  But this technique works only
20950so long as the containing function (`hack', in this example) does not
20951exit.
20952
20953 If you try to call the nested function through its address after the
20954containing function exits, all hell breaks loose.  If you try to call
20955it after a containing scope level exits, and if it refers to some of
20956the variables that are no longer in scope, you may be lucky, but it's
20957not wise to take the risk.  If, however, the nested function does not
20958refer to anything that has gone out of scope, you should be safe.
20959
20960 GCC implements taking the address of a nested function using a
20961technique called "trampolines".  This technique was described in
20962`Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference
20963Proceedings, October 17-21, 1988).
20964
20965 A nested function can jump to a label inherited from a containing
20966function, provided the label is explicitly declared in the containing
20967function (*note Local Labels::).  Such a jump returns instantly to the
20968containing function, exiting the nested function that did the `goto'
20969and any intermediate functions as well.  Here is an example:
20970
20971     bar (int *array, int offset, int size)
20972     {
20973       __label__ failure;
20974       int access (int *array, int index)
20975         {
20976           if (index > size)
20977             goto failure;
20978           return array[index + offset];
20979         }
20980       int i;
20981       /* ... */
20982       for (i = 0; i < size; i++)
20983         /* ... */ access (array, i) /* ... */
20984       /* ... */
20985       return 0;
20986
20987      /* Control comes here from `access'
20988         if it detects an error.  */
20989      failure:
20990       return -1;
20991     }
20992
20993 A nested function always has no linkage.  Declaring one with `extern'
20994or `static' is erroneous.  If you need to declare the nested function
20995before its definition, use `auto' (which is otherwise meaningless for
20996function declarations).
20997
20998     bar (int *array, int offset, int size)
20999     {
21000       __label__ failure;
21001       auto int access (int *, int);
21002       /* ... */
21003       int access (int *array, int index)
21004         {
21005           if (index > size)
21006             goto failure;
21007           return array[index + offset];
21008         }
21009       /* ... */
21010     }
21011
21012
21013File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nested Functions,  Up: C Extensions
21014
210156.5 Constructing Function Calls
21016===============================
21017
21018Using the built-in functions described below, you can record the
21019arguments a function received, and call another function with the same
21020arguments, without knowing the number or types of the arguments.
21021
21022 You can also record the return value of that function call, and later
21023return that value, without knowing what data type the function tried to
21024return (as long as your caller expects that data type).
21025
21026 However, these built-in functions may interact badly with some
21027sophisticated features or other extensions of the language.  It is,
21028therefore, not recommended to use them outside very simple functions
21029acting as mere forwarders for their arguments.
21030
21031 -- Built-in Function: void * __builtin_apply_args ()
21032     This built-in function returns a pointer to data describing how to
21033     perform a call with the same arguments as are passed to the
21034     current function.
21035
21036     The function saves the arg pointer register, structure value
21037     address, and all registers that might be used to pass arguments to
21038     a function into a block of memory allocated on the stack.  Then it
21039     returns the address of that block.
21040
21041 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
21042          *ARGUMENTS, size_t SIZE)
21043     This built-in function invokes FUNCTION with a copy of the
21044     parameters described by ARGUMENTS and SIZE.
21045
21046     The value of ARGUMENTS should be the value returned by
21047     `__builtin_apply_args'.  The argument SIZE specifies the size of
21048     the stack argument data, in bytes.
21049
21050     This function returns a pointer to data describing how to return
21051     whatever value is returned by FUNCTION.  The data is saved in a
21052     block of memory allocated on the stack.
21053
21054     It is not always simple to compute the proper value for SIZE.  The
21055     value is used by `__builtin_apply' to compute the amount of data
21056     that should be pushed on the stack and copied from the incoming
21057     argument area.
21058
21059 -- Built-in Function: void __builtin_return (void *RESULT)
21060     This built-in function returns the value described by RESULT from
21061     the containing function.  You should specify, for RESULT, a value
21062     returned by `__builtin_apply'.
21063
21064 -- Built-in Function:  __builtin_va_arg_pack ()
21065     This built-in function represents all anonymous arguments of an
21066     inline function.  It can be used only in inline functions that are
21067     always inlined, never compiled as a separate function, such as
21068     those using `__attribute__ ((__always_inline__))' or
21069     `__attribute__ ((__gnu_inline__))' extern inline functions.  It
21070     must be only passed as last argument to some other function with
21071     variable arguments.  This is useful for writing small wrapper
21072     inlines for variable argument functions, when using preprocessor
21073     macros is undesirable.  For example:
21074          extern int myprintf (FILE *f, const char *format, ...);
21075          extern inline __attribute__ ((__gnu_inline__)) int
21076          myprintf (FILE *f, const char *format, ...)
21077          {
21078            int r = fprintf (f, "myprintf: ");
21079            if (r < 0)
21080              return r;
21081            int s = fprintf (f, format, __builtin_va_arg_pack ());
21082            if (s < 0)
21083              return s;
21084            return r + s;
21085          }
21086
21087 -- Built-in Function: size_t __builtin_va_arg_pack_len ()
21088     This built-in function returns the number of anonymous arguments of
21089     an inline function.  It can be used only in inline functions that
21090     are always inlined, never compiled as a separate function, such as
21091     those using `__attribute__ ((__always_inline__))' or
21092     `__attribute__ ((__gnu_inline__))' extern inline functions.  For
21093     example following does link- or run-time checking of open
21094     arguments for optimized code:
21095          #ifdef __OPTIMIZE__
21096          extern inline __attribute__((__gnu_inline__)) int
21097          myopen (const char *path, int oflag, ...)
21098          {
21099            if (__builtin_va_arg_pack_len () > 1)
21100              warn_open_too_many_arguments ();
21101
21102            if (__builtin_constant_p (oflag))
21103              {
21104                if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1)
21105                  {
21106                    warn_open_missing_mode ();
21107                    return __open_2 (path, oflag);
21108                  }
21109                return open (path, oflag, __builtin_va_arg_pack ());
21110              }
21111
21112            if (__builtin_va_arg_pack_len () < 1)
21113              return __open_2 (path, oflag);
21114
21115            return open (path, oflag, __builtin_va_arg_pack ());
21116          }
21117          #endif
21118
21119
21120File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions
21121
211226.6 Referring to a Type with `typeof'
21123=====================================
21124
21125Another way to refer to the type of an expression is with `typeof'.
21126The syntax of using of this keyword looks like `sizeof', but the
21127construct acts semantically like a type name defined with `typedef'.
21128
21129 There are two ways of writing the argument to `typeof': with an
21130expression or with a type.  Here is an example with an expression:
21131
21132     typeof (x[0](1))
21133
21134This assumes that `x' is an array of pointers to functions; the type
21135described is that of the values of the functions.
21136
21137 Here is an example with a typename as the argument:
21138
21139     typeof (int *)
21140
21141Here the type described is that of pointers to `int'.
21142
21143 If you are writing a header file that must work when included in ISO C
21144programs, write `__typeof__' instead of `typeof'.  *Note Alternate
21145Keywords::.
21146
21147 A `typeof' construct can be used anywhere a typedef name can be used.
21148For example, you can use it in a declaration, in a cast, or inside of
21149`sizeof' or `typeof'.
21150
21151 The operand of `typeof' is evaluated for its side effects if and only
21152if it is an expression of variably modified type or the name of such a
21153type.
21154
21155 `typeof' is often useful in conjunction with statement expressions
21156(*note Statement Exprs::).  Here is how the two together can be used to
21157define a safe "maximum" macro which operates on any arithmetic type and
21158evaluates each of its arguments exactly once:
21159
21160     #define max(a,b) \
21161       ({ typeof (a) _a = (a); \
21162           typeof (b) _b = (b); \
21163         _a > _b ? _a : _b; })
21164
21165 The reason for using names that start with underscores for the local
21166variables is to avoid conflicts with variable names that occur within
21167the expressions that are substituted for `a' and `b'.  Eventually we
21168hope to design a new form of declaration syntax that allows you to
21169declare variables whose scopes start only after their initializers;
21170this will be a more reliable way to prevent such conflicts.
21171
21172Some more examples of the use of `typeof':
21173
21174   * This declares `y' with the type of what `x' points to.
21175
21176          typeof (*x) y;
21177
21178   * This declares `y' as an array of such values.
21179
21180          typeof (*x) y[4];
21181
21182   * This declares `y' as an array of pointers to characters:
21183
21184          typeof (typeof (char *)[4]) y;
21185
21186     It is equivalent to the following traditional C declaration:
21187
21188          char *y[4];
21189
21190     To see the meaning of the declaration using `typeof', and why it
21191     might be a useful way to write, rewrite it with these macros:
21192
21193          #define pointer(T)  typeof(T *)
21194          #define array(T, N) typeof(T [N])
21195
21196     Now the declaration can be rewritten this way:
21197
21198          array (pointer (char), 4) y;
21199
21200     Thus, `array (pointer (char), 4)' is the type of arrays of 4
21201     pointers to `char'.
21202
21203 _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more
21204limited extension that permitted one to write
21205
21206     typedef T = EXPR;
21207
21208with the effect of declaring T to have the type of the expression EXPR.
21209This extension does not work with GCC 3 (versions between 3.0 and 3.2
21210crash; 3.2.1 and later give an error).  Code that relies on it should
21211be rewritten to use `typeof':
21212
21213     typedef typeof(EXPR) T;
21214
21215This works with all versions of GCC.
21216
21217
21218File: gcc.info,  Node: Conditionals,  Next: __int128,  Prev: Typeof,  Up: C Extensions
21219
212206.7 Conditionals with Omitted Operands
21221======================================
21222
21223The middle operand in a conditional expression may be omitted.  Then if
21224the first operand is nonzero, its value is the value of the conditional
21225expression.
21226
21227 Therefore, the expression
21228
21229     x ? : y
21230
21231has the value of `x' if that is nonzero; otherwise, the value of `y'.
21232
21233 This example is perfectly equivalent to
21234
21235     x ? x : y
21236
21237In this simple case, the ability to omit the middle operand is not
21238especially useful.  When it becomes useful is when the first operand
21239does, or may (if it is a macro argument), contain a side effect.  Then
21240repeating the operand in the middle would perform the side effect
21241twice.  Omitting the middle operand uses the value already computed
21242without the undesirable effects of recomputing it.
21243
21244
21245File: gcc.info,  Node: __int128,  Next: Long Long,  Prev: Conditionals,  Up: C Extensions
21246
212476.8 128-bit integers
21248====================
21249
21250As an extension the integer scalar type `__int128' is supported for
21251targets which have an integer mode wide enough to hold 128 bits.
21252Simply write `__int128' for a signed 128-bit integer, or `unsigned
21253__int128' for an unsigned 128-bit integer.  There is no support in GCC
21254for expressing an integer constant of type `__int128' for targets with
21255`long long' integer less than 128 bits wide.
21256
21257
21258File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: __int128,  Up: C Extensions
21259
212606.9 Double-Word Integers
21261========================
21262
21263ISO C99 supports data types for integers that are at least 64 bits wide,
21264and as an extension GCC supports them in C90 mode and in C++.  Simply
21265write `long long int' for a signed integer, or `unsigned long long int'
21266for an unsigned integer.  To make an integer constant of type `long
21267long int', add the suffix `LL' to the integer.  To make an integer
21268constant of type `unsigned long long int', add the suffix `ULL' to the
21269integer.
21270
21271 You can use these types in arithmetic like any other integer types.
21272Addition, subtraction, and bitwise boolean operations on these types
21273are open-coded on all types of machines.  Multiplication is open-coded
21274if the machine supports a fullword-to-doubleword widening multiply
21275instruction.  Division and shifts are open-coded only on machines that
21276provide special support.  The operations that are not open-coded use
21277special library routines that come with GCC.
21278
21279 There may be pitfalls when you use `long long' types for function
21280arguments without function prototypes.  If a function expects type
21281`int' for its argument, and you pass a value of type `long long int',
21282confusion results because the caller and the subroutine disagree about
21283the number of bytes for the argument.  Likewise, if the function
21284expects `long long int' and you pass `int'.  The best way to avoid such
21285problems is to use prototypes.
21286
21287
21288File: gcc.info,  Node: Complex,  Next: Floating Types,  Prev: Long Long,  Up: C Extensions
21289
212906.10 Complex Numbers
21291====================
21292
21293ISO C99 supports complex floating data types, and as an extension GCC
21294supports them in C90 mode and in C++.  GCC also supports complex
21295integer data types which are not part of ISO C99.  You can declare
21296complex types using the keyword `_Complex'.  As an extension, the older
21297GNU keyword `__complex__' is also supported.
21298
21299 For example, `_Complex double x;' declares `x' as a variable whose
21300real part and imaginary part are both of type `double'.  `_Complex
21301short int y;' declares `y' to have real and imaginary parts of type
21302`short int'; this is not likely to be useful, but it shows that the set
21303of complex types is complete.
21304
21305 To write a constant with a complex data type, use the suffix `i' or
21306`j' (either one; they are equivalent).  For example, `2.5fi' has type
21307`_Complex float' and `3i' has type `_Complex int'.  Such a constant
21308always has a pure imaginary value, but you can form any complex value
21309you like by adding one to a real constant.  This is a GNU extension; if
21310you have an ISO C99 conforming C library (such as the GNU C Library),
21311and want to construct complex constants of floating type, you should
21312include `<complex.h>' and use the macros `I' or `_Complex_I' instead.
21313
21314 To extract the real part of a complex-valued expression EXP, write
21315`__real__ EXP'.  Likewise, use `__imag__' to extract the imaginary
21316part.  This is a GNU extension; for values of floating type, you should
21317use the ISO C99 functions `crealf', `creal', `creall', `cimagf',
21318`cimag' and `cimagl', declared in `<complex.h>' and also provided as
21319built-in functions by GCC.
21320
21321 The operator `~' performs complex conjugation when used on a value
21322with a complex type.  This is a GNU extension; for values of floating
21323type, you should use the ISO C99 functions `conjf', `conj' and `conjl',
21324declared in `<complex.h>' and also provided as built-in functions by
21325GCC.
21326
21327 GCC can allocate complex automatic variables in a noncontiguous
21328fashion; it's even possible for the real part to be in a register while
21329the imaginary part is on the stack (or vice versa).  Only the DWARF 2
21330debug info format can represent this, so use of DWARF 2 is recommended.
21331If you are using the stabs debug info format, GCC describes a
21332noncontiguous complex variable as if it were two separate variables of
21333noncomplex type.  If the variable's actual name is `foo', the two
21334fictitious variables are named `foo$real' and `foo$imag'.  You can
21335examine and set these two fictitious variables with your debugger.
21336
21337
21338File: gcc.info,  Node: Floating Types,  Next: Half-Precision,  Prev: Complex,  Up: C Extensions
21339
213406.11 Additional Floating Types
21341==============================
21342
21343As an extension, GNU C supports additional floating types, `__float80'
21344and `__float128' to support 80-bit (`XFmode') and 128-bit (`TFmode')
21345floating types.  Support for additional types includes the arithmetic
21346operators: add, subtract, multiply, divide; unary arithmetic operators;
21347relational operators; equality operators; and conversions to and from
21348integer and other floating types.  Use a suffix `w' or `W' in a literal
21349constant of type `__float80' and `q' or `Q' for `_float128'.  You can
21350declare complex types using the corresponding internal complex type,
21351`XCmode' for `__float80' type and `TCmode' for `__float128' type:
21352
21353     typedef _Complex float __attribute__((mode(TC))) _Complex128;
21354     typedef _Complex float __attribute__((mode(XC))) _Complex80;
21355
21356 Not all targets support additional floating-point types.  `__float80'
21357and `__float128' types are supported on i386, x86_64 and IA-64 targets.
21358The `__float128' type is supported on hppa HP-UX targets.
21359
21360
21361File: gcc.info,  Node: Half-Precision,  Next: Decimal Float,  Prev: Floating Types,  Up: C Extensions
21362
213636.12 Half-Precision Floating Point
21364==================================
21365
21366On ARM targets, GCC supports half-precision (16-bit) floating point via
21367the `__fp16' type.  You must enable this type explicitly with the
21368`-mfp16-format' command-line option in order to use it.
21369
21370 ARM supports two incompatible representations for half-precision
21371floating-point values.  You must choose one of the representations and
21372use it consistently in your program.
21373
21374 Specifying `-mfp16-format=ieee' selects the IEEE 754-2008 format.
21375This format can represent normalized values in the range of 2^-14 to
2137665504.  There are 11 bits of significand precision, approximately 3
21377decimal digits.
21378
21379 Specifying `-mfp16-format=alternative' selects the ARM alternative
21380format.  This representation is similar to the IEEE format, but does
21381not support infinities or NaNs.  Instead, the range of exponents is
21382extended, so that this format can represent normalized values in the
21383range of 2^-14 to 131008.
21384
21385 The `__fp16' type is a storage format only.  For purposes of
21386arithmetic and other operations, `__fp16' values in C or C++
21387expressions are automatically promoted to `float'.  In addition, you
21388cannot declare a function with a return value or parameters of type
21389`__fp16'.
21390
21391 Note that conversions from `double' to `__fp16' involve an
21392intermediate conversion to `float'.  Because of rounding, this can
21393sometimes produce a different result than a direct conversion.
21394
21395 ARM provides hardware support for conversions between `__fp16' and
21396`float' values as an extension to VFP and NEON (Advanced SIMD).  GCC
21397generates code using these hardware instructions if you compile with
21398options to select an FPU that provides them; for example,
21399`-mfpu=neon-fp16 -mfloat-abi=softfp', in addition to the
21400`-mfp16-format' option to select a half-precision format.
21401
21402 Language-level support for the `__fp16' data type is independent of
21403whether GCC generates code using hardware floating-point instructions.
21404In cases where hardware support is not specified, GCC implements
21405conversions between `__fp16' and `float' values as library calls.
21406
21407
21408File: gcc.info,  Node: Decimal Float,  Next: Hex Floats,  Prev: Half-Precision,  Up: C Extensions
21409
214106.13 Decimal Floating Types
21411===========================
21412
21413As an extension, GNU C supports decimal floating types as defined in
21414the N1312 draft of ISO/IEC WDTR24732.  Support for decimal floating
21415types in GCC will evolve as the draft technical report changes.
21416Calling conventions for any target might also change.  Not all targets
21417support decimal floating types.
21418
21419 The decimal floating types are `_Decimal32', `_Decimal64', and
21420`_Decimal128'.  They use a radix of ten, unlike the floating types
21421`float', `double', and `long double' whose radix is not specified by
21422the C standard but is usually two.
21423
21424 Support for decimal floating types includes the arithmetic operators
21425add, subtract, multiply, divide; unary arithmetic operators; relational
21426operators; equality operators; and conversions to and from integer and
21427other floating types.  Use a suffix `df' or `DF' in a literal constant
21428of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL'
21429for `_Decimal128'.
21430
21431 GCC support of decimal float as specified by the draft technical report
21432is incomplete:
21433
21434   * When the value of a decimal floating type cannot be represented in
21435     the integer type to which it is being converted, the result is
21436     undefined rather than the result value specified by the draft
21437     technical report.
21438
21439   * GCC does not provide the C library functionality associated with
21440     `math.h', `fenv.h', `stdio.h', `stdlib.h', and `wchar.h', which
21441     must come from a separate C library implementation.  Because of
21442     this the GNU C compiler does not define macro `__STDC_DEC_FP__' to
21443     indicate that the implementation conforms to the technical report.
21444
21445 Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by
21446the DWARF 2 debug information format.
21447
21448
21449File: gcc.info,  Node: Hex Floats,  Next: Fixed-Point,  Prev: Decimal Float,  Up: C Extensions
21450
214516.14 Hex Floats
21452===============
21453
21454ISO C99 supports floating-point numbers written not only in the usual
21455decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3'
21456written in hexadecimal format.  As a GNU extension, GCC supports this
21457in C90 mode (except in some cases when strictly conforming) and in C++.
21458In that format the `0x' hex introducer and the `p' or `P' exponent
21459field are mandatory.  The exponent is a decimal number that indicates
21460the power of 2 by which the significant part is multiplied.  Thus
21461`0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3'
21462is the same as `1.55e1'.
21463
21464 Unlike for floating-point numbers in the decimal notation the exponent
21465is always required in the hexadecimal notation.  Otherwise the compiler
21466would not be able to resolve the ambiguity of, e.g., `0x1.f'.  This
21467could mean `1.0f' or `1.9375' since `f' is also the extension for
21468floating-point constants of type `float'.
21469
21470
21471File: gcc.info,  Node: Fixed-Point,  Next: Named Address Spaces,  Prev: Hex Floats,  Up: C Extensions
21472
214736.15 Fixed-Point Types
21474======================
21475
21476As an extension, GNU C supports fixed-point types as defined in the
21477N1169 draft of ISO/IEC DTR 18037.  Support for fixed-point types in GCC
21478will evolve as the draft technical report changes.  Calling conventions
21479for any target might also change.  Not all targets support fixed-point
21480types.
21481
21482 The fixed-point types are `short _Fract', `_Fract', `long _Fract',
21483`long long _Fract', `unsigned short _Fract', `unsigned _Fract',
21484`unsigned long _Fract', `unsigned long long _Fract', `_Sat short
21485_Fract', `_Sat _Fract', `_Sat long _Fract', `_Sat long long _Fract',
21486`_Sat unsigned short _Fract', `_Sat unsigned _Fract', `_Sat unsigned
21487long _Fract', `_Sat unsigned long long _Fract', `short _Accum',
21488`_Accum', `long _Accum', `long long _Accum', `unsigned short _Accum',
21489`unsigned _Accum', `unsigned long _Accum', `unsigned long long _Accum',
21490`_Sat short _Accum', `_Sat _Accum', `_Sat long _Accum', `_Sat long long
21491_Accum', `_Sat unsigned short _Accum', `_Sat unsigned _Accum', `_Sat
21492unsigned long _Accum', `_Sat unsigned long long _Accum'.
21493
21494 Fixed-point data values contain fractional and optional integral parts.
21495The format of fixed-point data varies and depends on the target machine.
21496
21497 Support for fixed-point types includes:
21498   * prefix and postfix increment and decrement operators (`++', `--')
21499
21500   * unary arithmetic operators (`+', `-', `!')
21501
21502   * binary arithmetic operators (`+', `-', `*', `/')
21503
21504   * binary shift operators (`<<', `>>')
21505
21506   * relational operators (`<', `<=', `>=', `>')
21507
21508   * equality operators (`==', `!=')
21509
21510   * assignment operators (`+=', `-=', `*=', `/=', `<<=', `>>=')
21511
21512   * conversions to and from integer, floating-point, or fixed-point
21513     types
21514
21515 Use a suffix in a fixed-point literal constant:
21516   * `hr' or `HR' for `short _Fract' and `_Sat short _Fract'
21517
21518   * `r' or `R' for `_Fract' and `_Sat _Fract'
21519
21520   * `lr' or `LR' for `long _Fract' and `_Sat long _Fract'
21521
21522   * `llr' or `LLR' for `long long _Fract' and `_Sat long long _Fract'
21523
21524   * `uhr' or `UHR' for `unsigned short _Fract' and `_Sat unsigned
21525     short _Fract'
21526
21527   * `ur' or `UR' for `unsigned _Fract' and `_Sat unsigned _Fract'
21528
21529   * `ulr' or `ULR' for `unsigned long _Fract' and `_Sat unsigned long
21530     _Fract'
21531
21532   * `ullr' or `ULLR' for `unsigned long long _Fract' and `_Sat
21533     unsigned long long _Fract'
21534
21535   * `hk' or `HK' for `short _Accum' and `_Sat short _Accum'
21536
21537   * `k' or `K' for `_Accum' and `_Sat _Accum'
21538
21539   * `lk' or `LK' for `long _Accum' and `_Sat long _Accum'
21540
21541   * `llk' or `LLK' for `long long _Accum' and `_Sat long long _Accum'
21542
21543   * `uhk' or `UHK' for `unsigned short _Accum' and `_Sat unsigned
21544     short _Accum'
21545
21546   * `uk' or `UK' for `unsigned _Accum' and `_Sat unsigned _Accum'
21547
21548   * `ulk' or `ULK' for `unsigned long _Accum' and `_Sat unsigned long
21549     _Accum'
21550
21551   * `ullk' or `ULLK' for `unsigned long long _Accum' and `_Sat
21552     unsigned long long _Accum'
21553
21554 GCC support of fixed-point types as specified by the draft technical
21555report is incomplete:
21556
21557   * Pragmas to control overflow and rounding behaviors are not
21558     implemented.
21559
21560 Fixed-point types are supported by the DWARF 2 debug information
21561format.
21562
21563
21564File: gcc.info,  Node: Named Address Spaces,  Next: Zero Length,  Prev: Fixed-Point,  Up: C Extensions
21565
215666.16 Named Address Spaces
21567=========================
21568
21569As an extension, GNU C supports named address spaces as defined in the
21570N1275 draft of ISO/IEC DTR 18037.  Support for named address spaces in
21571GCC will evolve as the draft technical report changes.  Calling
21572conventions for any target might also change.  At present, only the
21573AVR, SPU, M32C, and RL78 targets support address spaces other than the
21574generic address space.
21575
21576 Address space identifiers may be used exactly like any other C type
21577qualifier (e.g., `const' or `volatile').  See the N1275 document for
21578more details.
21579
215806.16.1 AVR Named Address Spaces
21581-------------------------------
21582
21583On the AVR target, there are several address spaces that can be used in
21584order to put read-only data into the flash memory and access that data
21585by means of the special instructions `LPM' or `ELPM' needed to read
21586from flash.
21587
21588 Per default, any data including read-only data is located in RAM (the
21589generic address space) so that non-generic address spaces are needed to
21590locate read-only data in flash memory _and_ to generate the right
21591instructions to access this data without using (inline) assembler code.
21592
21593`__flash'
21594     The `__flash' qualifier locates data in the `.progmem.data'
21595     section. Data is read using the `LPM' instruction. Pointers to
21596     this address space are 16 bits wide.
21597
21598`__flash1'
21599`__flash2'
21600`__flash3'
21601`__flash4'
21602`__flash5'
21603     These are 16-bit address spaces locating data in section
21604     `.progmemN.data' where N refers to address space `__flashN'.  The
21605     compiler sets the `RAMPZ' segment register appropriately before
21606     reading data by means of the `ELPM' instruction.
21607
21608`__memx'
21609     This is a 24-bit address space that linearizes flash and RAM: If
21610     the high bit of the address is set, data is read from RAM using
21611     the lower two bytes as RAM address.  If the high bit of the
21612     address is clear, data is read from flash with `RAMPZ' set
21613     according to the high byte of the address.  *Note
21614     `__builtin_avr_flash_segment': AVR Built-in Functions.
21615
21616     Objects in this address space are located in `.progmemx.data'.
21617
21618 Example
21619
21620     char my_read (const __flash char ** p)
21621     {
21622         /* p is a pointer to RAM that points to a pointer to flash.
21623            The first indirection of p reads that flash pointer
21624            from RAM and the second indirection reads a char from this
21625            flash address.  */
21626
21627         return **p;
21628     }
21629
21630     /* Locate array[] in flash memory */
21631     const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 };
21632
21633     int i = 1;
21634
21635     int main (void)
21636     {
21637        /* Return 17 by reading from flash memory */
21638        return array[array[i]];
21639     }
21640
21641For each named address space supported by avr-gcc there is an equally
21642named but uppercase built-in macro defined.  The purpose is to
21643facilitate testing if respective address space support is available or
21644not:
21645
21646     #ifdef __FLASH
21647     const __flash int var = 1;
21648
21649     int read_var (void)
21650     {
21651         return var;
21652     }
21653     #else
21654     #include <avr/pgmspace.h> /* From AVR-LibC */
21655
21656     const int var PROGMEM = 1;
21657
21658     int read_var (void)
21659     {
21660         return (int) pgm_read_word (&var);
21661     }
21662     #endif /* __FLASH */
21663
21664Notice that attribute *note `progmem': AVR Variable Attributes.
21665locates data in flash but accesses to these data read from generic
21666address space, i.e.  from RAM, so that you need special accessors like
21667`pgm_read_byte' from AVR-LibC (http://nongnu.org/avr-libc/user-manual/)
21668together with attribute `progmem'.
21669
21670Limitations and caveats
21671
21672   * Reading across the 64 KiB section boundary of the `__flash' or
21673     `__flashN' address spaces shows undefined behavior. The only
21674     address space that supports reading across the 64 KiB flash
21675     segment boundaries is `__memx'.
21676
21677   * If you use one of the `__flashN' address spaces you must arrange
21678     your linker script to locate the `.progmemN.data' sections
21679     according to your needs.
21680
21681   * Any data or pointers to the non-generic address spaces must be
21682     qualified as `const', i.e. as read-only data.  This still applies
21683     if the data in one of these address spaces like software version
21684     number or calibration lookup table are intended to be changed
21685     after load time by, say, a boot loader. In this case the right
21686     qualification is `const' `volatile' so that the compiler must not
21687     optimize away known values or insert them as immediates into
21688     operands of instructions.
21689
21690   * The following code initializes a variable `pfoo' located in static
21691     storage with a 24-bit address:
21692          extern const __memx char foo;
21693          const __memx void *pfoo = &foo;
21694
21695     Such code requires at least binutils 2.23, see
21696     PR13503 (http://sourceware.org/PR13503).
21697
21698
216996.16.2 M32C Named Address Spaces
21700--------------------------------
21701
21702On the M32C target, with the R8C and M16C CPU variants, variables
21703qualified with `__far' are accessed using 32-bit addresses in order to
21704access memory beyond the first 64 Ki bytes.  If `__far' is used with
21705the M32CM or M32C CPU variants, it has no effect.
21706
217076.16.3 RL78 Named Address Spaces
21708--------------------------------
21709
21710On the RL78 target, variables qualified with `__far' are accessed with
2171132-bit pointers (20-bit addresses) rather than the default 16-bit
21712addresses.  Non-far variables are assumed to appear in the topmost
2171364 KiB of the address space.
21714
217156.16.4 SPU Named Address Spaces
21716-------------------------------
21717
21718On the SPU target variables may be declared as belonging to another
21719address space by qualifying the type with the `__ea' address space
21720identifier:
21721
21722     extern int __ea i;
21723
21724The compiler generates special code to access the variable `i'.  It may
21725use runtime library support, or generate special machine instructions
21726to access that address space.
21727
21728
21729File: gcc.info,  Node: Zero Length,  Next: Empty Structures,  Prev: Named Address Spaces,  Up: C Extensions
21730
217316.17 Arrays of Length Zero
21732==========================
21733
21734Zero-length arrays are allowed in GNU C.  They are very useful as the
21735last element of a structure that is really a header for a
21736variable-length object:
21737
21738     struct line {
21739       int length;
21740       char contents[0];
21741     };
21742
21743     struct line *thisline = (struct line *)
21744       malloc (sizeof (struct line) + this_length);
21745     thisline->length = this_length;
21746
21747 In ISO C90, you would have to give `contents' a length of 1, which
21748means either you waste space or complicate the argument to `malloc'.
21749
21750 In ISO C99, you would use a "flexible array member", which is slightly
21751different in syntax and semantics:
21752
21753   * Flexible array members are written as `contents[]' without the `0'.
21754
21755   * Flexible array members have incomplete type, and so the `sizeof'
21756     operator may not be applied.  As a quirk of the original
21757     implementation of zero-length arrays, `sizeof' evaluates to zero.
21758
21759   * Flexible array members may only appear as the last member of a
21760     `struct' that is otherwise non-empty.
21761
21762   * A structure containing a flexible array member, or a union
21763     containing such a structure (possibly recursively), may not be a
21764     member of a structure or an element of an array.  (However, these
21765     uses are permitted by GCC as extensions.)
21766
21767 GCC versions before 3.0 allowed zero-length arrays to be statically
21768initialized, as if they were flexible arrays.  In addition to those
21769cases that were useful, it also allowed initializations in situations
21770that would corrupt later data.  Non-empty initialization of zero-length
21771arrays is now treated like any case where there are more initializer
21772elements than the array holds, in that a suitable warning about "excess
21773elements in array" is given, and the excess elements (all of them, in
21774this case) are ignored.
21775
21776 Instead GCC allows static initialization of flexible array members.
21777This is equivalent to defining a new structure containing the original
21778structure followed by an array of sufficient size to contain the data.
21779E.g. in the following, `f1' is constructed as if it were declared like
21780`f2'.
21781
21782     struct f1 {
21783       int x; int y[];
21784     } f1 = { 1, { 2, 3, 4 } };
21785
21786     struct f2 {
21787       struct f1 f1; int data[3];
21788     } f2 = { { 1 }, { 2, 3, 4 } };
21789
21790The convenience of this extension is that `f1' has the desired type,
21791eliminating the need to consistently refer to `f2.f1'.
21792
21793 This has symmetry with normal static arrays, in that an array of
21794unknown size is also written with `[]'.
21795
21796 Of course, this extension only makes sense if the extra data comes at
21797the end of a top-level object, as otherwise we would be overwriting
21798data at subsequent offsets.  To avoid undue complication and confusion
21799with initialization of deeply nested arrays, we simply disallow any
21800non-empty initialization except when the structure is the top-level
21801object.  For example:
21802
21803     struct foo { int x; int y[]; };
21804     struct bar { struct foo z; };
21805
21806     struct foo a = { 1, { 2, 3, 4 } };        // Valid.
21807     struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
21808     struct bar c = { { 1, { } } };            // Valid.
21809     struct foo d[1] = { { 1 { 2, 3, 4 } } };  // Invalid.
21810
21811
21812File: gcc.info,  Node: Empty Structures,  Next: Variable Length,  Prev: Zero Length,  Up: C Extensions
21813
218146.18 Structures With No Members
21815===============================
21816
21817GCC permits a C structure to have no members:
21818
21819     struct empty {
21820     };
21821
21822 The structure has size zero.  In C++, empty structures are part of the
21823language.  G++ treats empty structures as if they had a single member
21824of type `char'.
21825
21826
21827File: gcc.info,  Node: Variable Length,  Next: Variadic Macros,  Prev: Empty Structures,  Up: C Extensions
21828
218296.19 Arrays of Variable Length
21830==============================
21831
21832Variable-length automatic arrays are allowed in ISO C99, and as an
21833extension GCC accepts them in C90 mode and in C++.  These arrays are
21834declared like any other automatic arrays, but with a length that is not
21835a constant expression.  The storage is allocated at the point of
21836declaration and deallocated when the block scope containing the
21837declaration exits.  For example:
21838
21839     FILE *
21840     concat_fopen (char *s1, char *s2, char *mode)
21841     {
21842       char str[strlen (s1) + strlen (s2) + 1];
21843       strcpy (str, s1);
21844       strcat (str, s2);
21845       return fopen (str, mode);
21846     }
21847
21848 Jumping or breaking out of the scope of the array name deallocates the
21849storage.  Jumping into the scope is not allowed; you get an error
21850message for it.
21851
21852 You can use the function `alloca' to get an effect much like
21853variable-length arrays.  The function `alloca' is available in many
21854other C implementations (but not in all).  On the other hand,
21855variable-length arrays are more elegant.
21856
21857 There are other differences between these two methods.  Space allocated
21858with `alloca' exists until the containing _function_ returns.  The
21859space for a variable-length array is deallocated as soon as the array
21860name's scope ends.  (If you use both variable-length arrays and
21861`alloca' in the same function, deallocation of a variable-length array
21862also deallocates anything more recently allocated with `alloca'.)
21863
21864 You can also use variable-length arrays as arguments to functions:
21865
21866     struct entry
21867     tester (int len, char data[len][len])
21868     {
21869       /* ... */
21870     }
21871
21872 The length of an array is computed once when the storage is allocated
21873and is remembered for the scope of the array in case you access it with
21874`sizeof'.
21875
21876 If you want to pass the array first and the length afterward, you can
21877use a forward declaration in the parameter list--another GNU extension.
21878
21879     struct entry
21880     tester (int len; char data[len][len], int len)
21881     {
21882       /* ... */
21883     }
21884
21885 The `int len' before the semicolon is a "parameter forward
21886declaration", and it serves the purpose of making the name `len' known
21887when the declaration of `data' is parsed.
21888
21889 You can write any number of such parameter forward declarations in the
21890parameter list.  They can be separated by commas or semicolons, but the
21891last one must end with a semicolon, which is followed by the "real"
21892parameter declarations.  Each forward declaration must match a "real"
21893declaration in parameter name and data type.  ISO C99 does not support
21894parameter forward declarations.
21895
21896
21897File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Variable Length,  Up: C Extensions
21898
218996.20 Macros with a Variable Number of Arguments.
21900================================================
21901
21902In the ISO C standard of 1999, a macro can be declared to accept a
21903variable number of arguments much as a function can.  The syntax for
21904defining the macro is similar to that of a function.  Here is an
21905example:
21906
21907     #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
21908
21909Here `...' is a "variable argument".  In the invocation of such a
21910macro, it represents the zero or more tokens until the closing
21911parenthesis that ends the invocation, including any commas.  This set of
21912tokens replaces the identifier `__VA_ARGS__' in the macro body wherever
21913it appears.  See the CPP manual for more information.
21914
21915 GCC has long supported variadic macros, and used a different syntax
21916that allowed you to give a name to the variable arguments just like any
21917other argument.  Here is an example:
21918
21919     #define debug(format, args...) fprintf (stderr, format, args)
21920
21921This is in all ways equivalent to the ISO C example above, but arguably
21922more readable and descriptive.
21923
21924 GNU CPP has two further variadic macro extensions, and permits them to
21925be used with either of the above forms of macro definition.
21926
21927 In standard C, you are not allowed to leave the variable argument out
21928entirely; but you are allowed to pass an empty argument.  For example,
21929this invocation is invalid in ISO C, because there is no comma after
21930the string:
21931
21932     debug ("A message")
21933
21934 GNU CPP permits you to completely omit the variable arguments in this
21935way.  In the above examples, the compiler would complain, though since
21936the expansion of the macro still has the extra comma after the format
21937string.
21938
21939 To help solve this problem, CPP behaves specially for variable
21940arguments used with the token paste operator, `##'.  If instead you
21941write
21942
21943     #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
21944
21945and if the variable arguments are omitted or empty, the `##' operator
21946causes the preprocessor to remove the comma before it.  If you do
21947provide some variable arguments in your macro invocation, GNU CPP does
21948not complain about the paste operation and instead places the variable
21949arguments after the comma.  Just like any other pasted macro argument,
21950these arguments are not macro expanded.
21951
21952
21953File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions
21954
219556.21 Slightly Looser Rules for Escaped Newlines
21956===============================================
21957
21958Recently, the preprocessor has relaxed its treatment of escaped
21959newlines.  Previously, the newline had to immediately follow a
21960backslash.  The current implementation allows whitespace in the form of
21961spaces, horizontal and vertical tabs, and form feeds between the
21962backslash and the subsequent newline.  The preprocessor issues a
21963warning, but treats it as a valid escaped newline and combines the two
21964lines to form a single logical line.  This works within comments and
21965tokens, as well as between tokens.  Comments are _not_ treated as
21966whitespace for the purposes of this relaxation, since they have not yet
21967been replaced with spaces.
21968
21969
21970File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions
21971
219726.22 Non-Lvalue Arrays May Have Subscripts
21973==========================================
21974
21975In ISO C99, arrays that are not lvalues still decay to pointers, and
21976may be subscripted, although they may not be modified or used after the
21977next sequence point and the unary `&' operator may not be applied to
21978them.  As an extension, GNU C allows such arrays to be subscripted in
21979C90 mode, though otherwise they do not decay to pointers outside C99
21980mode.  For example, this is valid in GNU C though not valid in C90:
21981
21982     struct foo {int a[4];};
21983
21984     struct foo f();
21985
21986     bar (int index)
21987     {
21988       return f().a[index];
21989     }
21990
21991
21992File: gcc.info,  Node: Pointer Arith,  Next: Initializers,  Prev: Subscripting,  Up: C Extensions
21993
219946.23 Arithmetic on `void'- and Function-Pointers
21995================================================
21996
21997In GNU C, addition and subtraction operations are supported on pointers
21998to `void' and on pointers to functions.  This is done by treating the
21999size of a `void' or of a function as 1.
22000
22001 A consequence of this is that `sizeof' is also allowed on `void' and
22002on function types, and returns 1.
22003
22004 The option `-Wpointer-arith' requests a warning if these extensions
22005are used.
22006
22007
22008File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointer Arith,  Up: C Extensions
22009
220106.24 Non-Constant Initializers
22011==============================
22012
22013As in standard C++ and ISO C99, the elements of an aggregate
22014initializer for an automatic variable are not required to be constant
22015expressions in GNU C.  Here is an example of an initializer with
22016run-time varying elements:
22017
22018     foo (float f, float g)
22019     {
22020       float beat_freqs[2] = { f-g, f+g };
22021       /* ... */
22022     }
22023
22024
22025File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions
22026
220276.25 Compound Literals
22028======================
22029
22030ISO C99 supports compound literals.  A compound literal looks like a
22031cast containing an initializer.  Its value is an object of the type
22032specified in the cast, containing the elements specified in the
22033initializer; it is an lvalue.  As an extension, GCC supports compound
22034literals in C90 mode and in C++, though the semantics are somewhat
22035different in C++.
22036
22037 Usually, the specified type is a structure.  Assume that `struct foo'
22038and `structure' are declared as shown:
22039
22040     struct foo {int a; char b[2];} structure;
22041
22042Here is an example of constructing a `struct foo' with a compound
22043literal:
22044
22045     structure = ((struct foo) {x + y, 'a', 0});
22046
22047This is equivalent to writing the following:
22048
22049     {
22050       struct foo temp = {x + y, 'a', 0};
22051       structure = temp;
22052     }
22053
22054 You can also construct an array, though this is dangerous in C++, as
22055explained below.  If all the elements of the compound literal are (made
22056up of) simple constant expressions, suitable for use in initializers of
22057objects of static storage duration, then the compound literal can be
22058coerced to a pointer to its first element and used in such an
22059initializer, as shown here:
22060
22061     char **foo = (char *[]) { "x", "y", "z" };
22062
22063 Compound literals for scalar types and union types are also allowed,
22064but then the compound literal is equivalent to a cast.
22065
22066 As a GNU extension, GCC allows initialization of objects with static
22067storage duration by compound literals (which is not possible in ISO
22068C99, because the initializer is not a constant).  It is handled as if
22069the object is initialized only with the bracket enclosed list if the
22070types of the compound literal and the object match.  The initializer
22071list of the compound literal must be constant.  If the object being
22072initialized has array type of unknown size, the size is determined by
22073compound literal size.
22074
22075     static struct foo x = (struct foo) {1, 'a', 'b'};
22076     static int y[] = (int []) {1, 2, 3};
22077     static int z[] = (int [3]) {1};
22078
22079The above lines are equivalent to the following:
22080     static struct foo x = {1, 'a', 'b'};
22081     static int y[] = {1, 2, 3};
22082     static int z[] = {1, 0, 0};
22083
22084 In C, a compound literal designates an unnamed object with static or
22085automatic storage duration.  In C++, a compound literal designates a
22086temporary object, which only lives until the end of its
22087full-expression.  As a result, well-defined C code that takes the
22088address of a subobject of a compound literal can be undefined in C++.
22089For instance, if the array compound literal example above appeared
22090inside a function, any subsequent use of `foo' in C++ has undefined
22091behavior because the lifetime of the array ends after the declaration
22092of `foo'.  As a result, the C++ compiler now rejects the conversion of
22093a temporary array to a pointer.
22094
22095 As an optimization, the C++ compiler sometimes gives array compound
22096literals longer lifetimes: when the array either appears outside a
22097function or has const-qualified type.  If `foo' and its initializer had
22098elements of `char *const' type rather than `char *', or if `foo' were a
22099global variable, the array would have static storage duration.  But it
22100is probably safest just to avoid the use of array compound literals in
22101code compiled as C++.
22102
22103
22104File: gcc.info,  Node: Designated Inits,  Next: Case Ranges,  Prev: Compound Literals,  Up: C Extensions
22105
221066.26 Designated Initializers
22107============================
22108
22109Standard C90 requires the elements of an initializer to appear in a
22110fixed order, the same as the order of the elements in the array or
22111structure being initialized.
22112
22113 In ISO C99 you can give the elements in any order, specifying the array
22114indices or structure field names they apply to, and GNU C allows this as
22115an extension in C90 mode as well.  This extension is not implemented in
22116GNU C++.
22117
22118 To specify an array index, write `[INDEX] =' before the element value.
22119For example,
22120
22121     int a[6] = { [4] = 29, [2] = 15 };
22122
22123is equivalent to
22124
22125     int a[6] = { 0, 0, 15, 0, 29, 0 };
22126
22127The index values must be constant expressions, even if the array being
22128initialized is automatic.
22129
22130 An alternative syntax for this that has been obsolete since GCC 2.5 but
22131GCC still accepts is to write `[INDEX]' before the element value, with
22132no `='.
22133
22134 To initialize a range of elements to the same value, write `[FIRST ...
22135LAST] = VALUE'.  This is a GNU extension.  For example,
22136
22137     int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
22138
22139If the value in it has side-effects, the side-effects happen only once,
22140not for each initialized field by the range initializer.
22141
22142Note that the length of the array is the highest value specified plus
22143one.
22144
22145 In a structure initializer, specify the name of a field to initialize
22146with `.FIELDNAME =' before the element value.  For example, given the
22147following structure,
22148
22149     struct point { int x, y; };
22150
22151the following initialization
22152
22153     struct point p = { .y = yvalue, .x = xvalue };
22154
22155is equivalent to
22156
22157     struct point p = { xvalue, yvalue };
22158
22159 Another syntax that has the same meaning, obsolete since GCC 2.5, is
22160`FIELDNAME:', as shown here:
22161
22162     struct point p = { y: yvalue, x: xvalue };
22163
22164 The `[INDEX]' or `.FIELDNAME' is known as a "designator".  You can
22165also use a designator (or the obsolete colon syntax) when initializing
22166a union, to specify which element of the union should be used.  For
22167example,
22168
22169     union foo { int i; double d; };
22170
22171     union foo f = { .d = 4 };
22172
22173converts 4 to a `double' to store it in the union using the second
22174element.  By contrast, casting 4 to type `union foo' stores it into the
22175union as the integer `i', since it is an integer.  (*Note Cast to
22176Union::.)
22177
22178 You can combine this technique of naming elements with ordinary C
22179initialization of successive elements.  Each initializer element that
22180does not have a designator applies to the next consecutive element of
22181the array or structure.  For example,
22182
22183     int a[6] = { [1] = v1, v2, [4] = v4 };
22184
22185is equivalent to
22186
22187     int a[6] = { 0, v1, v2, 0, v4, 0 };
22188
22189 Labeling the elements of an array initializer is especially useful
22190when the indices are characters or belong to an `enum' type.  For
22191example:
22192
22193     int whitespace[256]
22194       = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
22195           ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
22196
22197 You can also write a series of `.FIELDNAME' and `[INDEX]' designators
22198before an `=' to specify a nested subobject to initialize; the list is
22199taken relative to the subobject corresponding to the closest
22200surrounding brace pair.  For example, with the `struct point'
22201declaration above:
22202
22203     struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
22204
22205If the same field is initialized multiple times, it has the value from
22206the last initialization.  If any such overridden initialization has
22207side-effect, it is unspecified whether the side-effect happens or not.
22208Currently, GCC discards them and issues a warning.
22209
22210
22211File: gcc.info,  Node: Case Ranges,  Next: Cast to Union,  Prev: Designated Inits,  Up: C Extensions
22212
222136.27 Case Ranges
22214================
22215
22216You can specify a range of consecutive values in a single `case' label,
22217like this:
22218
22219     case LOW ... HIGH:
22220
22221This has the same effect as the proper number of individual `case'
22222labels, one for each integer value from LOW to HIGH, inclusive.
22223
22224 This feature is especially useful for ranges of ASCII character codes:
22225
22226     case 'A' ... 'Z':
22227
22228 *Be careful:* Write spaces around the `...', for otherwise it may be
22229parsed wrong when you use it with integer values.  For example, write
22230this:
22231
22232     case 1 ... 5:
22233
22234rather than this:
22235
22236     case 1...5:
22237
22238
22239File: gcc.info,  Node: Cast to Union,  Next: Mixed Declarations,  Prev: Case Ranges,  Up: C Extensions
22240
222416.28 Cast to a Union Type
22242=========================
22243
22244A cast to union type is similar to other casts, except that the type
22245specified is a union type.  You can specify the type either with `union
22246TAG' or with a typedef name.  A cast to union is actually a
22247constructor, not a cast, and hence does not yield an lvalue like normal
22248casts.  (*Note Compound Literals::.)
22249
22250 The types that may be cast to the union type are those of the members
22251of the union.  Thus, given the following union and variables:
22252
22253     union foo { int i; double d; };
22254     int x;
22255     double y;
22256
22257both `x' and `y' can be cast to type `union foo'.
22258
22259 Using the cast as the right-hand side of an assignment to a variable of
22260union type is equivalent to storing in a member of the union:
22261
22262     union foo u;
22263     /* ... */
22264     u = (union foo) x  ==  u.i = x
22265     u = (union foo) y  ==  u.d = y
22266
22267 You can also use the union cast as a function argument:
22268
22269     void hack (union foo);
22270     /* ... */
22271     hack ((union foo) x);
22272
22273
22274File: gcc.info,  Node: Mixed Declarations,  Next: Function Attributes,  Prev: Cast to Union,  Up: C Extensions
22275
222766.29 Mixed Declarations and Code
22277================================
22278
22279ISO C99 and ISO C++ allow declarations and code to be freely mixed
22280within compound statements.  As an extension, GNU C also allows this in
22281C90 mode.  For example, you could do:
22282
22283     int i;
22284     /* ... */
22285     i++;
22286     int j = i + 2;
22287
22288 Each identifier is visible from where it is declared until the end of
22289the enclosing block.
22290
22291
22292File: gcc.info,  Node: Function Attributes,  Next: Attribute Syntax,  Prev: Mixed Declarations,  Up: C Extensions
22293
222946.30 Declaring Attributes of Functions
22295======================================
22296
22297In GNU C, you declare certain things about functions called in your
22298program which help the compiler optimize function calls and check your
22299code more carefully.
22300
22301 The keyword `__attribute__' allows you to specify special attributes
22302when making a declaration.  This keyword is followed by an attribute
22303specification inside double parentheses.  The following attributes are
22304currently defined for functions on all targets: `aligned',
22305`alloc_size', `noreturn', `returns_twice', `noinline', `noclone',
22306`always_inline', `flatten', `pure', `const', `nothrow', `sentinel',
22307`format', `format_arg', `no_instrument_function', `no_split_stack',
22308`section', `constructor', `destructor', `used', `unused', `deprecated',
22309`weak', `malloc', `alias', `ifunc', `warn_unused_result', `nonnull',
22310`gnu_inline', `externally_visible', `hot', `cold', `artificial',
22311`no_sanitize_address', `no_address_safety_analysis', `error' and
22312`warning'.  Several other attributes are defined for functions on
22313particular target systems.  Other attributes, including `section' are
22314supported for variables declarations (*note Variable Attributes::) and
22315for types (*note Type Attributes::).
22316
22317 GCC plugins may provide their own attributes.
22318
22319 You may also specify attributes with `__' preceding and following each
22320keyword.  This allows you to use them in header files without being
22321concerned about a possible macro of the same name.  For example, you
22322may use `__noreturn__' instead of `noreturn'.
22323
22324 *Note Attribute Syntax::, for details of the exact syntax for using
22325attributes.
22326
22327`alias ("TARGET")'
22328     The `alias' attribute causes the declaration to be emitted as an
22329     alias for another symbol, which must be specified.  For instance,
22330
22331          void __f () { /* Do something. */; }
22332          void f () __attribute__ ((weak, alias ("__f")));
22333
22334     defines `f' to be a weak alias for `__f'.  In C++, the mangled
22335     name for the target must be used.  It is an error if `__f' is not
22336     defined in the same translation unit.
22337
22338     Not all target machines support this attribute.
22339
22340`aligned (ALIGNMENT)'
22341     This attribute specifies a minimum alignment for the function,
22342     measured in bytes.
22343
22344     You cannot use this attribute to decrease the alignment of a
22345     function, only to increase it.  However, when you explicitly
22346     specify a function alignment this overrides the effect of the
22347     `-falign-functions' (*note Optimize Options::) option for this
22348     function.
22349
22350     Note that the effectiveness of `aligned' attributes may be limited
22351     by inherent limitations in your linker.  On many systems, the
22352     linker is only able to arrange for functions to be aligned up to a
22353     certain maximum alignment.  (For some linkers, the maximum
22354     supported alignment may be very very small.)  See your linker
22355     documentation for further information.
22356
22357     The `aligned' attribute can also be used for variables and fields
22358     (*note Variable Attributes::.)
22359
22360`alloc_size'
22361     The `alloc_size' attribute is used to tell the compiler that the
22362     function return value points to memory, where the size is given by
22363     one or two of the functions parameters.  GCC uses this information
22364     to improve the correctness of `__builtin_object_size'.
22365
22366     The function parameter(s) denoting the allocated size are
22367     specified by one or two integer arguments supplied to the
22368     attribute.  The allocated size is either the value of the single
22369     function argument specified or the product of the two function
22370     arguments specified.  Argument numbering starts at one.
22371
22372     For instance,
22373
22374          void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2)))
22375          void my_realloc(void*, size_t) __attribute__((alloc_size(2)))
22376
22377     declares that `my_calloc' returns memory of the size given by the
22378     product of parameter 1 and 2 and that `my_realloc' returns memory
22379     of the size given by parameter 2.
22380
22381`always_inline'
22382     Generally, functions are not inlined unless optimization is
22383     specified.  For functions declared inline, this attribute inlines
22384     the function even if no optimization level is specified.
22385
22386`gnu_inline'
22387     This attribute should be used with a function that is also declared
22388     with the `inline' keyword.  It directs GCC to treat the function
22389     as if it were defined in gnu90 mode even when compiling in C99 or
22390     gnu99 mode.
22391
22392     If the function is declared `extern', then this definition of the
22393     function is used only for inlining.  In no case is the function
22394     compiled as a standalone function, not even if you take its address
22395     explicitly.  Such an address becomes an external reference, as if
22396     you had only declared the function, and had not defined it.  This
22397     has almost the effect of a macro.  The way to use this is to put a
22398     function definition in a header file with this attribute, and put
22399     another copy of the function, without `extern', in a library file.
22400     The definition in the header file causes most calls to the
22401     function to be inlined.  If any uses of the function remain, they
22402     refer to the single copy in the library.  Note that the two
22403     definitions of the functions need not be precisely the same,
22404     although if they do not have the same effect your program may
22405     behave oddly.
22406
22407     In C, if the function is neither `extern' nor `static', then the
22408     function is compiled as a standalone function, as well as being
22409     inlined where possible.
22410
22411     This is how GCC traditionally handled functions declared `inline'.
22412     Since ISO C99 specifies a different semantics for `inline', this
22413     function attribute is provided as a transition measure and as a
22414     useful feature in its own right.  This attribute is available in
22415     GCC 4.1.3 and later.  It is available if either of the
22416     preprocessor macros `__GNUC_GNU_INLINE__' or
22417     `__GNUC_STDC_INLINE__' are defined.  *Note An Inline Function is
22418     As Fast As a Macro: Inline.
22419
22420     In C++, this attribute does not depend on `extern' in any way, but
22421     it still requires the `inline' keyword to enable its special
22422     behavior.
22423
22424`artificial'
22425     This attribute is useful for small inline wrappers that if possible
22426     should appear during debugging as a unit.  Depending on the debug
22427     info format it either means marking the function as artificial or
22428     using the caller location for all instructions within the inlined
22429     body.
22430
22431`bank_switch'
22432     When added to an interrupt handler with the M32C port, causes the
22433     prologue and epilogue to use bank switching to preserve the
22434     registers rather than saving them on the stack.
22435
22436`flatten'
22437     Generally, inlining into a function is limited.  For a function
22438     marked with this attribute, every call inside this function is
22439     inlined, if possible.  Whether the function itself is considered
22440     for inlining depends on its size and the current inlining
22441     parameters.
22442
22443`error ("MESSAGE")'
22444     If this attribute is used on a function declaration and a call to
22445     such a function is not eliminated through dead code elimination or
22446     other optimizations, an error that includes MESSAGE is diagnosed.
22447     This is useful for compile-time checking, especially together with
22448     `__builtin_constant_p' and inline functions where checking the
22449     inline function arguments is not possible through `extern char
22450     [(condition) ? 1 : -1];' tricks.  While it is possible to leave
22451     the function undefined and thus invoke a link failure, when using
22452     this attribute the problem is diagnosed earlier and with exact
22453     location of the call even in presence of inline functions or when
22454     not emitting debugging information.
22455
22456`warning ("MESSAGE")'
22457     If this attribute is used on a function declaration and a call to
22458     such a function is not eliminated through dead code elimination or
22459     other optimizations, a warning that includes MESSAGE is diagnosed.
22460     This is useful for compile-time checking, especially together with
22461     `__builtin_constant_p' and inline functions.  While it is possible
22462     to define the function with a message in `.gnu.warning*' section,
22463     when using this attribute the problem is diagnosed earlier and
22464     with exact location of the call even in presence of inline
22465     functions or when not emitting debugging information.
22466
22467`cdecl'
22468     On the Intel 386, the `cdecl' attribute causes the compiler to
22469     assume that the calling function pops off the stack space used to
22470     pass arguments.  This is useful to override the effects of the
22471     `-mrtd' switch.
22472
22473`const'
22474     Many functions do not examine any values except their arguments,
22475     and have no effects except the return value.  Basically this is
22476     just slightly more strict class than the `pure' attribute below,
22477     since function is not allowed to read global memory.
22478
22479     Note that a function that has pointer arguments and examines the
22480     data pointed to must _not_ be declared `const'.  Likewise, a
22481     function that calls a non-`const' function usually must not be
22482     `const'.  It does not make sense for a `const' function to return
22483     `void'.
22484
22485     The attribute `const' is not implemented in GCC versions earlier
22486     than 2.5.  An alternative way to declare that a function has no
22487     side effects, which works in the current version and in some older
22488     versions, is as follows:
22489
22490          typedef int intfn ();
22491
22492          extern const intfn square;
22493
22494     This approach does not work in GNU C++ from 2.6.0 on, since the
22495     language specifies that the `const' must be attached to the return
22496     value.
22497
22498`constructor'
22499`destructor'
22500`constructor (PRIORITY)'
22501`destructor (PRIORITY)'
22502     The `constructor' attribute causes the function to be called
22503     automatically before execution enters `main ()'.  Similarly, the
22504     `destructor' attribute causes the function to be called
22505     automatically after `main ()' completes or `exit ()' is called.
22506     Functions with these attributes are useful for initializing data
22507     that is used implicitly during the execution of the program.
22508
22509     You may provide an optional integer priority to control the order
22510     in which constructor and destructor functions are run.  A
22511     constructor with a smaller priority number runs before a
22512     constructor with a larger priority number; the opposite
22513     relationship holds for destructors.  So, if you have a constructor
22514     that allocates a resource and a destructor that deallocates the
22515     same resource, both functions typically have the same priority.
22516     The priorities for constructor and destructor functions are the
22517     same as those specified for namespace-scope C++ objects (*note C++
22518     Attributes::).
22519
22520     These attributes are not currently implemented for Objective-C.
22521
22522`deprecated'
22523`deprecated (MSG)'
22524     The `deprecated' attribute results in a warning if the function is
22525     used anywhere in the source file.  This is useful when identifying
22526     functions that are expected to be removed in a future version of a
22527     program.  The warning also includes the location of the declaration
22528     of the deprecated function, to enable users to easily find further
22529     information about why the function is deprecated, or what they
22530     should do instead.  Note that the warnings only occurs for uses:
22531
22532          int old_fn () __attribute__ ((deprecated));
22533          int old_fn ();
22534          int (*fn_ptr)() = old_fn;
22535
22536     results in a warning on line 3 but not line 2.  The optional MSG
22537     argument, which must be a string, is printed in the warning if
22538     present.
22539
22540     The `deprecated' attribute can also be used for variables and
22541     types (*note Variable Attributes::, *note Type Attributes::.)
22542
22543`disinterrupt'
22544     On Epiphany and MeP targets, this attribute causes the compiler to
22545     emit instructions to disable interrupts for the duration of the
22546     given function.
22547
22548`dllexport'
22549     On Microsoft Windows targets and Symbian OS targets the
22550     `dllexport' attribute causes the compiler to provide a global
22551     pointer to a pointer in a DLL, so that it can be referenced with
22552     the `dllimport' attribute.  On Microsoft Windows targets, the
22553     pointer name is formed by combining `_imp__' and the function or
22554     variable name.
22555
22556     You can use `__declspec(dllexport)' as a synonym for
22557     `__attribute__ ((dllexport))' for compatibility with other
22558     compilers.
22559
22560     On systems that support the `visibility' attribute, this attribute
22561     also implies "default" visibility.  It is an error to explicitly
22562     specify any other visibility.
22563
22564     In previous versions of GCC, the `dllexport' attribute was ignored
22565     for inlined functions, unless the `-fkeep-inline-functions' flag
22566     had been used.  The default behavior now is to emit all dllexported
22567     inline functions; however, this can cause object file-size bloat,
22568     in which case the old behavior can be restored by using
22569     `-fno-keep-inline-dllexport'.
22570
22571     The attribute is also ignored for undefined symbols.
22572
22573     When applied to C++ classes, the attribute marks defined
22574     non-inlined member functions and static data members as exports.
22575     Static consts initialized in-class are not marked unless they are
22576     also defined out-of-class.
22577
22578     For Microsoft Windows targets there are alternative methods for
22579     including the symbol in the DLL's export table such as using a
22580     `.def' file with an `EXPORTS' section or, with GNU ld, using the
22581     `--export-all' linker flag.
22582
22583`dllimport'
22584     On Microsoft Windows and Symbian OS targets, the `dllimport'
22585     attribute causes the compiler to reference a function or variable
22586     via a global pointer to a pointer that is set up by the DLL
22587     exporting the symbol.  The attribute implies `extern'.  On
22588     Microsoft Windows targets, the pointer name is formed by combining
22589     `_imp__' and the function or variable name.
22590
22591     You can use `__declspec(dllimport)' as a synonym for
22592     `__attribute__ ((dllimport))' for compatibility with other
22593     compilers.
22594
22595     On systems that support the `visibility' attribute, this attribute
22596     also implies "default" visibility.  It is an error to explicitly
22597     specify any other visibility.
22598
22599     Currently, the attribute is ignored for inlined functions.  If the
22600     attribute is applied to a symbol _definition_, an error is
22601     reported.  If a symbol previously declared `dllimport' is later
22602     defined, the attribute is ignored in subsequent references, and a
22603     warning is emitted.  The attribute is also overridden by a
22604     subsequent declaration as `dllexport'.
22605
22606     When applied to C++ classes, the attribute marks non-inlined
22607     member functions and static data members as imports.  However, the
22608     attribute is ignored for virtual methods to allow creation of
22609     vtables using thunks.
22610
22611     On the SH Symbian OS target the `dllimport' attribute also has
22612     another affect--it can cause the vtable and run-time type
22613     information for a class to be exported.  This happens when the
22614     class has a dllimported constructor or a non-inline, non-pure
22615     virtual function and, for either of those two conditions, the
22616     class also has an inline constructor or destructor and has a key
22617     function that is defined in the current translation unit.
22618
22619     For Microsoft Windows targets the use of the `dllimport' attribute
22620     on functions is not necessary, but provides a small performance
22621     benefit by eliminating a thunk in the DLL.  The use of the
22622     `dllimport' attribute on imported variables was required on older
22623     versions of the GNU linker, but can now be avoided by passing the
22624     `--enable-auto-import' switch to the GNU linker.  As with
22625     functions, using the attribute for a variable eliminates a thunk in
22626     the DLL.
22627
22628     One drawback to using this attribute is that a pointer to a
22629     _variable_ marked as `dllimport' cannot be used as a constant
22630     address. However, a pointer to a _function_ with the `dllimport'
22631     attribute can be used as a constant initializer; in this case, the
22632     address of a stub function in the import lib is referenced.  On
22633     Microsoft Windows targets, the attribute can be disabled for
22634     functions by setting the `-mnop-fun-dllimport' flag.
22635
22636`eightbit_data'
22637     Use this attribute on the H8/300, H8/300H, and H8S to indicate
22638     that the specified variable should be placed into the eight-bit
22639     data section.  The compiler generates more efficient code for
22640     certain operations on data in the eight-bit data area.  Note the
22641     eight-bit data area is limited to 256 bytes of data.
22642
22643     You must use GAS and GLD from GNU binutils version 2.7 or later for
22644     this attribute to work correctly.
22645
22646`exception_handler'
22647     Use this attribute on the Blackfin to indicate that the specified
22648     function is an exception handler.  The compiler generates function
22649     entry and exit sequences suitable for use in an exception handler
22650     when this attribute is present.
22651
22652`externally_visible'
22653     This attribute, attached to a global variable or function,
22654     nullifies the effect of the `-fwhole-program' command-line option,
22655     so the object remains visible outside the current compilation unit.
22656
22657     If `-fwhole-program' is used together with `-flto' and `gold' is
22658     used as the linker plugin, `externally_visible' attributes are
22659     automatically added to functions (not variable yet due to a
22660     current `gold' issue) that are accessed outside of LTO objects
22661     according to resolution file produced by `gold'.  For other
22662     linkers that cannot generate resolution file, explicit
22663     `externally_visible' attributes are still necessary.
22664
22665`far'
22666     On 68HC11 and 68HC12 the `far' attribute causes the compiler to
22667     use a calling convention that takes care of switching memory banks
22668     when entering and leaving a function.  This calling convention is
22669     also the default when using the `-mlong-calls' option.
22670
22671     On 68HC12 the compiler uses the `call' and `rtc' instructions to
22672     call and return from a function.
22673
22674     On 68HC11 the compiler generates a sequence of instructions to
22675     invoke a board-specific routine to switch the memory bank and call
22676     the real function.  The board-specific routine simulates a `call'.
22677     At the end of a function, it jumps to a board-specific routine
22678     instead of using `rts'.  The board-specific return routine
22679     simulates the `rtc'.
22680
22681     On MeP targets this causes the compiler to use a calling convention
22682     that assumes the called function is too far away for the built-in
22683     addressing modes.
22684
22685`fast_interrupt'
22686     Use this attribute on the M32C and RX ports to indicate that the
22687     specified function is a fast interrupt handler.  This is just like
22688     the `interrupt' attribute, except that `freit' is used to return
22689     instead of `reit'.
22690
22691`fastcall'
22692     On the Intel 386, the `fastcall' attribute causes the compiler to
22693     pass the first argument (if of integral type) in the register ECX
22694     and the second argument (if of integral type) in the register EDX.
22695     Subsequent and other typed arguments are passed on the stack.  The
22696     called function pops the arguments off the stack.  If the number
22697     of arguments is variable all arguments are pushed on the stack.
22698
22699`thiscall'
22700     On the Intel 386, the `thiscall' attribute causes the compiler to
22701     pass the first argument (if of integral type) in the register ECX.
22702     Subsequent and other typed arguments are passed on the stack. The
22703     called function pops the arguments off the stack.  If the number
22704     of arguments is variable all arguments are pushed on the stack.
22705     The `thiscall' attribute is intended for C++ non-static member
22706     functions.  As a GCC extension, this calling convention can be
22707     used for C functions and for static member methods.
22708
22709`format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
22710     The `format' attribute specifies that a function takes `printf',
22711     `scanf', `strftime' or `strfmon' style arguments that should be
22712     type-checked against a format string.  For example, the
22713     declaration:
22714
22715          extern int
22716          my_printf (void *my_object, const char *my_format, ...)
22717                __attribute__ ((format (printf, 2, 3)));
22718
22719     causes the compiler to check the arguments in calls to `my_printf'
22720     for consistency with the `printf' style format string argument
22721     `my_format'.
22722
22723     The parameter ARCHETYPE determines how the format string is
22724     interpreted, and should be `printf', `scanf', `strftime',
22725     `gnu_printf', `gnu_scanf', `gnu_strftime' or `strfmon'.  (You can
22726     also use `__printf__', `__scanf__', `__strftime__' or
22727     `__strfmon__'.)  On MinGW targets, `ms_printf', `ms_scanf', and
22728     `ms_strftime' are also present.  ARCHETYPE values such as `printf'
22729     refer to the formats accepted by the system's C runtime library,
22730     while values prefixed with `gnu_' always refer to the formats
22731     accepted by the GNU C Library.  On Microsoft Windows targets,
22732     values prefixed with `ms_' refer to the formats accepted by the
22733     `msvcrt.dll' library.  The parameter STRING-INDEX specifies which
22734     argument is the format string argument (starting from 1), while
22735     FIRST-TO-CHECK is the number of the first argument to check
22736     against the format string.  For functions where the arguments are
22737     not available to be checked (such as `vprintf'), specify the third
22738     parameter as zero.  In this case the compiler only checks the
22739     format string for consistency.  For `strftime' formats, the third
22740     parameter is required to be zero.  Since non-static C++ methods
22741     have an implicit `this' argument, the arguments of such methods
22742     should be counted from two, not one, when giving values for
22743     STRING-INDEX and FIRST-TO-CHECK.
22744
22745     In the example above, the format string (`my_format') is the second
22746     argument of the function `my_print', and the arguments to check
22747     start with the third argument, so the correct parameters for the
22748     format attribute are 2 and 3.
22749
22750     The `format' attribute allows you to identify your own functions
22751     that take format strings as arguments, so that GCC can check the
22752     calls to these functions for errors.  The compiler always (unless
22753     `-ffreestanding' or `-fno-builtin' is used) checks formats for the
22754     standard library functions `printf', `fprintf', `sprintf',
22755     `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and
22756     `vsprintf' whenever such warnings are requested (using
22757     `-Wformat'), so there is no need to modify the header file
22758     `stdio.h'.  In C99 mode, the functions `snprintf', `vsnprintf',
22759     `vscanf', `vfscanf' and `vsscanf' are also checked.  Except in
22760     strictly conforming C standard modes, the X/Open function
22761     `strfmon' is also checked as are `printf_unlocked' and
22762     `fprintf_unlocked'.  *Note Options Controlling C Dialect: C
22763     Dialect Options.
22764
22765     For Objective-C dialects, `NSString' (or `__NSString__') is
22766     recognized in the same context.  Declarations including these
22767     format attributes are parsed for correct syntax, however the
22768     result of checking of such format strings is not yet defined, and
22769     is not carried out by this version of the compiler.
22770
22771     The target may also provide additional types of format checks.
22772     *Note Format Checks Specific to Particular Target Machines: Target
22773     Format Checks.
22774
22775`format_arg (STRING-INDEX)'
22776     The `format_arg' attribute specifies that a function takes a format
22777     string for a `printf', `scanf', `strftime' or `strfmon' style
22778     function and modifies it (for example, to translate it into
22779     another language), so the result can be passed to a `printf',
22780     `scanf', `strftime' or `strfmon' style function (with the
22781     remaining arguments to the format function the same as they would
22782     have been for the unmodified string).  For example, the
22783     declaration:
22784
22785          extern char *
22786          my_dgettext (char *my_domain, const char *my_format)
22787                __attribute__ ((format_arg (2)));
22788
22789     causes the compiler to check the arguments in calls to a `printf',
22790     `scanf', `strftime' or `strfmon' type function, whose format
22791     string argument is a call to the `my_dgettext' function, for
22792     consistency with the format string argument `my_format'.  If the
22793     `format_arg' attribute had not been specified, all the compiler
22794     could tell in such calls to format functions would be that the
22795     format string argument is not constant; this would generate a
22796     warning when `-Wformat-nonliteral' is used, but the calls could
22797     not be checked without the attribute.
22798
22799     The parameter STRING-INDEX specifies which argument is the format
22800     string argument (starting from one).  Since non-static C++ methods
22801     have an implicit `this' argument, the arguments of such methods
22802     should be counted from two.
22803
22804     The `format_arg' attribute allows you to identify your own
22805     functions that modify format strings, so that GCC can check the
22806     calls to `printf', `scanf', `strftime' or `strfmon' type function
22807     whose operands are a call to one of your own function.  The
22808     compiler always treats `gettext', `dgettext', and `dcgettext' in
22809     this manner except when strict ISO C support is requested by
22810     `-ansi' or an appropriate `-std' option, or `-ffreestanding' or
22811     `-fno-builtin' is used.  *Note Options Controlling C Dialect: C
22812     Dialect Options.
22813
22814     For Objective-C dialects, the `format-arg' attribute may refer to
22815     an `NSString' reference for compatibility with the `format'
22816     attribute above.
22817
22818     The target may also allow additional types in `format-arg'
22819     attributes.  *Note Format Checks Specific to Particular Target
22820     Machines: Target Format Checks.
22821
22822`function_vector'
22823     Use this attribute on the H8/300, H8/300H, and H8S to indicate
22824     that the specified function should be called through the function
22825     vector.  Calling a function through the function vector reduces
22826     code size, however; the function vector has a limited size
22827     (maximum 128 entries on the H8/300 and 64 entries on the H8/300H
22828     and H8S) and shares space with the interrupt vector.
22829
22830     On SH2A targets, this attribute declares a function to be called
22831     using the TBR relative addressing mode.  The argument to this
22832     attribute is the entry number of the same function in a vector
22833     table containing all the TBR relative addressable functions.  For
22834     correct operation the TBR must be setup accordingly to point to
22835     the start of the vector table before any functions with this
22836     attribute are invoked.  Usually a good place to do the
22837     initialization is the startup routine.  The TBR relative vector
22838     table can have at max 256 function entries.  The jumps to these
22839     functions are generated using a SH2A specific, non delayed branch
22840     instruction JSR/N @(disp8,TBR).  You must use GAS and GLD from GNU
22841     binutils version 2.7 or later for this attribute to work correctly.
22842
22843     Please refer the example of M16C target, to see the use of this
22844     attribute while declaring a function,
22845
22846     In an application, for a function being called once, this attribute
22847     saves at least 8 bytes of code; and if other successive calls are
22848     being made to the same function, it saves 2 bytes of code per each
22849     of these calls.
22850
22851     On M16C/M32C targets, the `function_vector' attribute declares a
22852     special page subroutine call function. Use of this attribute
22853     reduces the code size by 2 bytes for each call generated to the
22854     subroutine. The argument to the attribute is the vector number
22855     entry from the special page vector table which contains the 16
22856     low-order bits of the subroutine's entry address. Each vector
22857     table has special page number (18 to 255) that is used in `jsrs'
22858     instructions.  Jump addresses of the routines are generated by
22859     adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of
22860     M32C targets), to the 2-byte addresses set in the vector table.
22861     Therefore you need to ensure that all the special page vector
22862     routines should get mapped within the address range 0x0F0000 to
22863     0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C).
22864
22865     In the following example 2 bytes are saved for each call to
22866     function `foo'.
22867
22868          void foo (void) __attribute__((function_vector(0x18)));
22869          void foo (void)
22870          {
22871          }
22872
22873          void bar (void)
22874          {
22875              foo();
22876          }
22877
22878     If functions are defined in one file and are called in another
22879     file, then be sure to write this declaration in both files.
22880
22881     This attribute is ignored for R8C target.
22882
22883`ifunc ("RESOLVER")'
22884     The `ifunc' attribute is used to mark a function as an indirect
22885     function using the STT_GNU_IFUNC symbol type extension to the ELF
22886     standard.  This allows the resolution of the symbol value to be
22887     determined dynamically at load time, and an optimized version of
22888     the routine can be selected for the particular processor or other
22889     system characteristics determined then.  To use this attribute,
22890     first define the implementation functions available, and a
22891     resolver function that returns a pointer to the selected
22892     implementation function.  The implementation functions'
22893     declarations must match the API of the function being implemented,
22894     the resolver's declaration is be a function returning pointer to
22895     void function returning void:
22896
22897          void *my_memcpy (void *dst, const void *src, size_t len)
22898          {
22899            ...
22900          }
22901
22902          static void (*resolve_memcpy (void)) (void)
22903          {
22904            return my_memcpy; // we'll just always select this routine
22905          }
22906
22907     The exported header file declaring the function the user calls
22908     would contain:
22909
22910          extern void *memcpy (void *, const void *, size_t);
22911
22912     allowing the user to call this as a regular function, unaware of
22913     the implementation.  Finally, the indirect function needs to be
22914     defined in the same translation unit as the resolver function:
22915
22916          void *memcpy (void *, const void *, size_t)
22917               __attribute__ ((ifunc ("resolve_memcpy")));
22918
22919     Indirect functions cannot be weak, and require a recent binutils
22920     (at least version 2.20.1), and GNU C library (at least version
22921     2.11.1).
22922
22923`interrupt'
22924     Use this attribute on the ARM, AVR, CR16, Epiphany, M32C, M32R/D,
22925     m68k, MeP, MIPS, RL78, RX and Xstormy16 ports to indicate that the
22926     specified function is an interrupt handler.  The compiler
22927     generates function entry and exit sequences suitable for use in an
22928     interrupt handler when this attribute is present.  With Epiphany
22929     targets it may also generate a special section with code to
22930     initialize the interrupt vector table.
22931
22932     Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S,
22933     MicroBlaze, and SH processors can be specified via the
22934     `interrupt_handler' attribute.
22935
22936     Note, on the AVR, the hardware globally disables interrupts when an
22937     interrupt is executed.  The first instruction of an interrupt
22938     handler declared with this attribute is a `SEI' instruction to
22939     re-enable interrupts.  See also the `signal' function attribute
22940     that does not insert a `SEI' instruction.  If both `signal' and
22941     `interrupt' are specified for the same function, `signal' is
22942     silently ignored.
22943
22944     Note, for the ARM, you can specify the kind of interrupt to be
22945     handled by adding an optional parameter to the interrupt attribute
22946     like this:
22947
22948          void f () __attribute__ ((interrupt ("IRQ")));
22949
22950     Permissible values for this parameter are: `IRQ', `FIQ', `SWI',
22951     `ABORT' and `UNDEF'.
22952
22953     On ARMv7-M the interrupt type is ignored, and the attribute means
22954     the function may be called with a word-aligned stack pointer.
22955
22956     On Epiphany targets one or more optional parameters can be added
22957     like this:
22958
22959          void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
22960
22961     Permissible values for these parameters are: `reset',
22962     `software_exception', `page_miss', `timer0', `timer1', `message',
22963     `dma0', `dma1', `wand' and `swi'.  Multiple parameters indicate
22964     that multiple entries in the interrupt vector table should be
22965     initialized for this function, i.e. for each parameter NAME, a
22966     jump to the function is emitted in the section ivt_entry_NAME.
22967     The parameter(s) may be omitted entirely, in which case no
22968     interrupt vector table entry is provided.
22969
22970     Note, on Epiphany targets, interrupts are enabled inside the
22971     function unless the `disinterrupt' attribute is also specified.
22972
22973     On Epiphany targets, you can also use the following attribute to
22974     modify the behavior of an interrupt handler:
22975    `forwarder_section'
22976          The interrupt handler may be in external memory which cannot
22977          be reached by a branch instruction, so generate a local
22978          memory trampoline to transfer control.  The single parameter
22979          identifies the section where the trampoline is placed.
22980
22981     The following examples are all valid uses of these attributes on
22982     Epiphany targets:
22983          void __attribute__ ((interrupt)) universal_handler ();
22984          void __attribute__ ((interrupt ("dma1"))) dma1_handler ();
22985          void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
22986          void __attribute__ ((interrupt ("timer0"), disinterrupt))
22987            fast_timer_handler ();
22988          void __attribute__ ((interrupt ("dma0, dma1"), forwarder_section ("tramp")))
22989            external_dma_handler ();
22990
22991     On MIPS targets, you can use the following attributes to modify
22992     the behavior of an interrupt handler:
22993    `use_shadow_register_set'
22994          Assume that the handler uses a shadow register set, instead of
22995          the main general-purpose registers.
22996
22997    `keep_interrupts_masked'
22998          Keep interrupts masked for the whole function.  Without this
22999          attribute, GCC tries to reenable interrupts for as much of
23000          the function as it can.
23001
23002    `use_debug_exception_return'
23003          Return using the `deret' instruction.  Interrupt handlers
23004          that don't have this attribute return using `eret' instead.
23005
23006     You can use any combination of these attributes, as shown below:
23007          void __attribute__ ((interrupt)) v0 ();
23008          void __attribute__ ((interrupt, use_shadow_register_set)) v1 ();
23009          void __attribute__ ((interrupt, keep_interrupts_masked)) v2 ();
23010          void __attribute__ ((interrupt, use_debug_exception_return)) v3 ();
23011          void __attribute__ ((interrupt, use_shadow_register_set,
23012                               keep_interrupts_masked)) v4 ();
23013          void __attribute__ ((interrupt, use_shadow_register_set,
23014                               use_debug_exception_return)) v5 ();
23015          void __attribute__ ((interrupt, keep_interrupts_masked,
23016                               use_debug_exception_return)) v6 ();
23017          void __attribute__ ((interrupt, use_shadow_register_set,
23018                               keep_interrupts_masked,
23019                               use_debug_exception_return)) v7 ();
23020
23021     On RL78, use `brk_interrupt' instead of `interrupt' for handlers
23022     intended to be used with the `BRK' opcode (i.e. those that must
23023     end with `RETB' instead of `RETI').
23024
23025`interrupt_handler'
23026     Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S,
23027     and SH to indicate that the specified function is an interrupt
23028     handler.  The compiler generates function entry and exit sequences
23029     suitable for use in an interrupt handler when this attribute is
23030     present.
23031
23032`interrupt_thread'
23033     Use this attribute on fido, a subarchitecture of the m68k, to
23034     indicate that the specified function is an interrupt handler that
23035     is designed to run as a thread.  The compiler omits generate
23036     prologue/epilogue sequences and replaces the return instruction
23037     with a `sleep' instruction.  This attribute is available only on
23038     fido.
23039
23040`isr'
23041     Use this attribute on ARM to write Interrupt Service Routines.
23042     This is an alias to the `interrupt' attribute above.
23043
23044`kspisusp'
23045     When used together with `interrupt_handler', `exception_handler'
23046     or `nmi_handler', code is generated to load the stack pointer from
23047     the USP register in the function prologue.
23048
23049`l1_text'
23050     This attribute specifies a function to be placed into L1
23051     Instruction SRAM. The function is put into a specific section
23052     named `.l1.text'.  With `-mfdpic', function calls with a such
23053     function as the callee or caller uses inlined PLT.
23054
23055`l2'
23056     On the Blackfin, this attribute specifies a function to be placed
23057     into L2 SRAM. The function is put into a specific section named
23058     `.l1.text'. With `-mfdpic', callers of such functions use an
23059     inlined PLT.
23060
23061`leaf'
23062     Calls to external functions with this attribute must return to the
23063     current compilation unit only by return or by exception handling.
23064     In particular, leaf functions are not allowed to call callback
23065     function passed to it from the current compilation unit or
23066     directly call functions exported by the unit or longjmp into the
23067     unit.  Leaf function might still call functions from other
23068     compilation units and thus they are not necessarily leaf in the
23069     sense that they contain no function calls at all.
23070
23071     The attribute is intended for library functions to improve
23072     dataflow analysis.  The compiler takes the hint that any data not
23073     escaping the current compilation unit can not be used or modified
23074     by the leaf function.  For example, the `sin' function is a leaf
23075     function, but `qsort' is not.
23076
23077     Note that leaf functions might invoke signals and signal handlers
23078     might be defined in the current compilation unit and use static
23079     variables.  The only compliant way to write such a signal handler
23080     is to declare such variables `volatile'.
23081
23082     The attribute has no effect on functions defined within the
23083     current compilation unit.  This is to allow easy merging of
23084     multiple compilation units into one, for example, by using the
23085     link-time optimization.  For this reason the attribute is not
23086     allowed on types to annotate indirect calls.
23087
23088`long_call/short_call'
23089     This attribute specifies how a particular function is called on
23090     ARM and Epiphany.  Both attributes override the `-mlong-calls'
23091     (*note ARM Options::) command-line switch and `#pragma long_calls'
23092     settings.  The `long_call' attribute indicates that the function
23093     might be far away from the call site and require a different (more
23094     expensive) calling sequence.   The `short_call' attribute always
23095     places the offset to the function from the call site into the `BL'
23096     instruction directly.
23097
23098`longcall/shortcall'
23099     On the Blackfin, RS/6000 and PowerPC, the `longcall' attribute
23100     indicates that the function might be far away from the call site
23101     and require a different (more expensive) calling sequence.  The
23102     `shortcall' attribute indicates that the function is always close
23103     enough for the shorter calling sequence to be used.  These
23104     attributes override both the `-mlongcall' switch and, on the
23105     RS/6000 and PowerPC, the `#pragma longcall' setting.
23106
23107     *Note RS/6000 and PowerPC Options::, for more information on
23108     whether long calls are necessary.
23109
23110`long_call/near/far'
23111     These attributes specify how a particular function is called on
23112     MIPS.  The attributes override the `-mlong-calls' (*note MIPS
23113     Options::) command-line switch.  The `long_call' and `far'
23114     attributes are synonyms, and cause the compiler to always call the
23115     function by first loading its address into a register, and then
23116     using the contents of that register.  The `near' attribute has the
23117     opposite effect; it specifies that non-PIC calls should be made
23118     using the more efficient `jal' instruction.
23119
23120`malloc'
23121     The `malloc' attribute is used to tell the compiler that a function
23122     may be treated as if any non-`NULL' pointer it returns cannot
23123     alias any other pointer valid when the function returns and that
23124     the memory has undefined content.  This often improves
23125     optimization.  Standard functions with this property include
23126     `malloc' and `calloc'.  `realloc'-like functions do not have this
23127     property as the memory pointed to does not have undefined content.
23128
23129`mips16/nomips16'
23130     On MIPS targets, you can use the `mips16' and `nomips16' function
23131     attributes to locally select or turn off MIPS16 code generation.
23132     A function with the `mips16' attribute is emitted as MIPS16 code,
23133     while MIPS16 code generation is disabled for functions with the
23134     `nomips16' attribute.  These attributes override the `-mips16' and
23135     `-mno-mips16' options on the command line (*note MIPS Options::).
23136
23137     When compiling files containing mixed MIPS16 and non-MIPS16 code,
23138     the preprocessor symbol `__mips16' reflects the setting on the
23139     command line, not that within individual functions.  Mixed MIPS16
23140     and non-MIPS16 code may interact badly with some GCC extensions
23141     such as `__builtin_apply' (*note Constructing Calls::).
23142
23143`model (MODEL-NAME)'
23144     On the M32R/D, use this attribute to set the addressability of an
23145     object, and of the code generated for a function.  The identifier
23146     MODEL-NAME is one of `small', `medium', or `large', representing
23147     each of the code models.
23148
23149     Small model objects live in the lower 16MB of memory (so that their
23150     addresses can be loaded with the `ld24' instruction), and are
23151     callable with the `bl' instruction.
23152
23153     Medium model objects may live anywhere in the 32-bit address space
23154     (the compiler generates `seth/add3' instructions to load their
23155     addresses), and are callable with the `bl' instruction.
23156
23157     Large model objects may live anywhere in the 32-bit address space
23158     (the compiler generates `seth/add3' instructions to load their
23159     addresses), and may not be reachable with the `bl' instruction
23160     (the compiler generates the much slower `seth/add3/jl' instruction
23161     sequence).
23162
23163     On IA-64, use this attribute to set the addressability of an
23164     object.  At present, the only supported identifier for MODEL-NAME
23165     is `small', indicating addressability via "small" (22-bit)
23166     addresses (so that their addresses can be loaded with the `addl'
23167     instruction).  Caveat: such addressing is by definition not
23168     position independent and hence this attribute must not be used for
23169     objects defined by shared libraries.
23170
23171`ms_abi/sysv_abi'
23172     On 32-bit and 64-bit (i?86|x86_64)-*-* targets, you can use an ABI
23173     attribute to indicate which calling convention should be used for
23174     a function.  The `ms_abi' attribute tells the compiler to use the
23175     Microsoft ABI, while the `sysv_abi' attribute tells the compiler
23176     to use the ABI used on GNU/Linux and other systems.  The default
23177     is to use the Microsoft ABI when targeting Windows.  On all other
23178     systems, the default is the x86/AMD ABI.
23179
23180     Note, the `ms_abi' attribute for Microsoft Windows 64-bit targets
23181     currently requires the `-maccumulate-outgoing-args' option.
23182
23183`callee_pop_aggregate_return (NUMBER)'
23184     On 32-bit i?86-*-* targets, you can use this attribute to control
23185     how aggregates are returned in memory.  If the caller is
23186     responsible for popping the hidden pointer together with the rest
23187     of the arguments, specify NUMBER equal to zero.  If callee is
23188     responsible for popping the hidden pointer, specify NUMBER equal
23189     to one.
23190
23191     The default i386 ABI assumes that the callee pops the stack for
23192     hidden pointer.  However, on 32-bit i386 Microsoft Windows targets,
23193     the compiler assumes that the caller pops the stack for hidden
23194     pointer.
23195
23196`ms_hook_prologue'
23197     On 32-bit i[34567]86-*-* targets and 64-bit x86_64-*-* targets,
23198     you can use this function attribute to make GCC generate the
23199     "hot-patching" function prologue used in Win32 API functions in
23200     Microsoft Windows XP Service Pack 2 and newer.
23201
23202`hotpatch (HALFWORDS-BEFORE-FUNCTION-LABEL,HALFWORDS-AFTER-FUNCTION-LABEL)'
23203     On S/390 System z targets, you can use this function attribute to
23204     make GCC generate a "hot-patching" function prologue.  If the
23205     `-mhotpatch=' command-line option is used at the same time, the
23206     `hotpatch' attribute takes precedence.  The first of the two
23207     arguments specifies the number of halfwords to be added before the
23208     function label.  A second argument can be used to specify the
23209     number of halfwords to be added after the function label.  For
23210     both arguments the maximum allowed value is 1000000.
23211
23212     If both ar guments are zero, hotpatching is disabled.
23213
23214`naked'
23215     Use this attribute on the ARM, AVR, MCORE, RX and SPU ports to
23216     indicate that the specified function does not need
23217     prologue/epilogue sequences generated by the compiler.  It is up
23218     to the programmer to provide these sequences. The only statements
23219     that can be safely included in naked functions are `asm'
23220     statements that do not have operands.  All other statements,
23221     including declarations of local variables, `if' statements, and so
23222     forth, should be avoided.  Naked functions should be used to
23223     implement the body of an assembly function, while allowing the
23224     compiler to construct the requisite function declaration for the
23225     assembler.
23226
23227`near'
23228     On 68HC11 and 68HC12 the `near' attribute causes the compiler to
23229     use the normal calling convention based on `jsr' and `rts'.  This
23230     attribute can be used to cancel the effect of the `-mlong-calls'
23231     option.
23232
23233     On MeP targets this attribute causes the compiler to assume the
23234     called function is close enough to use the normal calling
23235     convention, overriding the `-mtf' command-line option.
23236
23237`nesting'
23238     Use this attribute together with `interrupt_handler',
23239     `exception_handler' or `nmi_handler' to indicate that the function
23240     entry code should enable nested interrupts or exceptions.
23241
23242`nmi_handler'
23243     Use this attribute on the Blackfin to indicate that the specified
23244     function is an NMI handler.  The compiler generates function entry
23245     and exit sequences suitable for use in an NMI handler when this
23246     attribute is present.
23247
23248`no_instrument_function'
23249     If `-finstrument-functions' is given, profiling function calls are
23250     generated at entry and exit of most user-compiled functions.
23251     Functions with this attribute are not so instrumented.
23252
23253`no_split_stack'
23254     If `-fsplit-stack' is given, functions have a small prologue which
23255     decides whether to split the stack.  Functions with the
23256     `no_split_stack' attribute do not have that prologue, and thus may
23257     run with only a small amount of stack space available.
23258
23259`noinline'
23260     This function attribute prevents a function from being considered
23261     for inlining.  If the function does not have side-effects, there
23262     are optimizations other than inlining that cause function calls to
23263     be optimized away, although the function call is live.  To keep
23264     such calls from being optimized away, put
23265          asm ("");
23266
23267     (*note Extended Asm::) in the called function, to serve as a
23268     special side-effect.
23269
23270`noclone'
23271     This function attribute prevents a function from being considered
23272     for cloning--a mechanism that produces specialized copies of
23273     functions and which is (currently) performed by interprocedural
23274     constant propagation.
23275
23276`nonnull (ARG-INDEX, ...)'
23277     The `nonnull' attribute specifies that some function parameters
23278     should be non-null pointers.  For instance, the declaration:
23279
23280          extern void *
23281          my_memcpy (void *dest, const void *src, size_t len)
23282                  __attribute__((nonnull (1, 2)));
23283
23284     causes the compiler to check that, in calls to `my_memcpy',
23285     arguments DEST and SRC are non-null.  If the compiler determines
23286     that a null pointer is passed in an argument slot marked as
23287     non-null, and the `-Wnonnull' option is enabled, a warning is
23288     issued.  The compiler may also choose to make optimizations based
23289     on the knowledge that certain function arguments will never be
23290     null.
23291
23292     If no argument index list is given to the `nonnull' attribute, all
23293     pointer arguments are marked as non-null.  To illustrate, the
23294     following declaration is equivalent to the previous example:
23295
23296          extern void *
23297          my_memcpy (void *dest, const void *src, size_t len)
23298                  __attribute__((nonnull));
23299
23300`noreturn'
23301     A few standard library functions, such as `abort' and `exit',
23302     cannot return.  GCC knows this automatically.  Some programs define
23303     their own functions that never return.  You can declare them
23304     `noreturn' to tell the compiler this fact.  For example,
23305
23306          void fatal () __attribute__ ((noreturn));
23307
23308          void
23309          fatal (/* ... */)
23310          {
23311            /* ... */ /* Print error message. */ /* ... */
23312            exit (1);
23313          }
23314
23315     The `noreturn' keyword tells the compiler to assume that `fatal'
23316     cannot return.  It can then optimize without regard to what would
23317     happen if `fatal' ever did return.  This makes slightly better
23318     code.  More importantly, it helps avoid spurious warnings of
23319     uninitialized variables.
23320
23321     The `noreturn' keyword does not affect the exceptional path when
23322     that applies: a `noreturn'-marked function may still return to the
23323     caller by throwing an exception or calling `longjmp'.
23324
23325     Do not assume that registers saved by the calling function are
23326     restored before calling the `noreturn' function.
23327
23328     It does not make sense for a `noreturn' function to have a return
23329     type other than `void'.
23330
23331     The attribute `noreturn' is not implemented in GCC versions
23332     earlier than 2.5.  An alternative way to declare that a function
23333     does not return, which works in the current version and in some
23334     older versions, is as follows:
23335
23336          typedef void voidfn ();
23337
23338          volatile voidfn fatal;
23339
23340     This approach does not work in GNU C++.
23341
23342`nothrow'
23343     The `nothrow' attribute is used to inform the compiler that a
23344     function cannot throw an exception.  For example, most functions in
23345     the standard C library can be guaranteed not to throw an exception
23346     with the notable exceptions of `qsort' and `bsearch' that take
23347     function pointer arguments.  The `nothrow' attribute is not
23348     implemented in GCC versions earlier than 3.3.
23349
23350`nosave_low_regs'
23351     Use this attribute on SH targets to indicate that an
23352     `interrupt_handler' function should not save and restore registers
23353     R0..R7.  This can be used on SH3* and SH4* targets that have a
23354     second R0..R7 register bank for non-reentrant interrupt handlers.
23355
23356`optimize'
23357     The `optimize' attribute is used to specify that a function is to
23358     be compiled with different optimization options than specified on
23359     the command line.  Arguments can either be numbers or strings.
23360     Numbers are assumed to be an optimization level.  Strings that
23361     begin with `O' are assumed to be an optimization option, while
23362     other options are assumed to be used with a `-f' prefix.  You can
23363     also use the `#pragma GCC optimize' pragma to set the optimization
23364     options that affect more than one function.  *Note Function
23365     Specific Option Pragmas::, for details about the `#pragma GCC
23366     optimize' pragma.
23367
23368     This can be used for instance to have frequently-executed functions
23369     compiled with more aggressive optimization options that produce
23370     faster and larger code, while other functions can be compiled with
23371     less aggressive options.
23372
23373`OS_main/OS_task'
23374     On AVR, functions with the `OS_main' or `OS_task' attribute do not
23375     save/restore any call-saved register in their prologue/epilogue.
23376
23377     The `OS_main' attribute can be used when there _is guarantee_ that
23378     interrupts are disabled at the time when the function is entered.
23379     This saves resources when the stack pointer has to be changed to
23380     set up a frame for local variables.
23381
23382     The `OS_task' attribute can be used when there is _no guarantee_
23383     that interrupts are disabled at that time when the function is
23384     entered like for, e.g. task functions in a multi-threading
23385     operating system. In that case, changing the stack pointer
23386     register is guarded by save/clear/restore of the global interrupt
23387     enable flag.
23388
23389     The differences to the `naked' function attribute are:
23390        * `naked' functions do not have a return instruction whereas
23391          `OS_main' and `OS_task' functions have a `RET' or `RETI'
23392          return instruction.
23393
23394        * `naked' functions do not set up a frame for local variables
23395          or a frame pointer whereas `OS_main' and `OS_task' do this as
23396          needed.
23397
23398`pcs'
23399     The `pcs' attribute can be used to control the calling convention
23400     used for a function on ARM.  The attribute takes an argument that
23401     specifies the calling convention to use.
23402
23403     When compiling using the AAPCS ABI (or a variant of it) then valid
23404     values for the argument are `"aapcs"' and `"aapcs-vfp"'.  In order
23405     to use a variant other than `"aapcs"' then the compiler must be
23406     permitted to use the appropriate co-processor registers (i.e., the
23407     VFP registers must be available in order to use `"aapcs-vfp"').
23408     For example,
23409
23410          /* Argument passed in r0, and result returned in r0+r1.  */
23411          double f2d (float) __attribute__((pcs("aapcs")));
23412
23413     Variadic functions always use the `"aapcs"' calling convention and
23414     the compiler rejects attempts to specify an alternative.
23415
23416`pure'
23417     Many functions have no effects except the return value and their
23418     return value depends only on the parameters and/or global
23419     variables.  Such a function can be subject to common subexpression
23420     elimination and loop optimization just as an arithmetic operator
23421     would be.  These functions should be declared with the attribute
23422     `pure'.  For example,
23423
23424          int square (int) __attribute__ ((pure));
23425
23426     says that the hypothetical function `square' is safe to call fewer
23427     times than the program says.
23428
23429     Some of common examples of pure functions are `strlen' or `memcmp'.
23430     Interesting non-pure functions are functions with infinite loops
23431     or those depending on volatile memory or other system resource,
23432     that may change between two consecutive calls (such as `feof' in a
23433     multithreading environment).
23434
23435     The attribute `pure' is not implemented in GCC versions earlier
23436     than 2.96.
23437
23438`hot'
23439     The `hot' attribute on a function is used to inform the compiler
23440     that the function is a hot spot of the compiled program.  The
23441     function is optimized more aggressively and on many target it is
23442     placed into special subsection of the text section so all hot
23443     functions appears close together improving locality.
23444
23445     When profile feedback is available, via `-fprofile-use', hot
23446     functions are automatically detected and this attribute is ignored.
23447
23448     The `hot' attribute on functions is not implemented in GCC versions
23449     earlier than 4.3.
23450
23451     The `hot' attribute on a label is used to inform the compiler that
23452     path following the label are more likely than paths that are not so
23453     annotated.  This attribute is used in cases where
23454     `__builtin_expect' cannot be used, for instance with computed goto
23455     or `asm goto'.
23456
23457     The `hot' attribute on labels is not implemented in GCC versions
23458     earlier than 4.8.
23459
23460`cold'
23461     The `cold' attribute on functions is used to inform the compiler
23462     that the function is unlikely to be executed.  The function is
23463     optimized for size rather than speed and on many targets it is
23464     placed into special subsection of the text section so all cold
23465     functions appears close together improving code locality of
23466     non-cold parts of program.  The paths leading to call of cold
23467     functions within code are marked as unlikely by the branch
23468     prediction mechanism.  It is thus useful to mark functions used to
23469     handle unlikely conditions, such as `perror', as cold to improve
23470     optimization of hot functions that do call marked functions in
23471     rare occasions.
23472
23473     When profile feedback is available, via `-fprofile-use', cold
23474     functions are automatically detected and this attribute is ignored.
23475
23476     The `cold' attribute on functions is not implemented in GCC
23477     versions earlier than 4.3.
23478
23479     The `cold' attribute on labels is used to inform the compiler that
23480     the path following the label is unlikely to be executed.  This
23481     attribute is used in cases where `__builtin_expect' cannot be
23482     used, for instance with computed goto or `asm goto'.
23483
23484     The `cold' attribute on labels is not implemented in GCC versions
23485     earlier than 4.8.
23486
23487`no_sanitize_address'
23488`no_address_safety_analysis'
23489     The `no_sanitize_address' attribute on functions is used to inform
23490     the compiler that it should not instrument memory accesses in the
23491     function when compiling with the `-fsanitize=address' option.  The
23492     `no_address_safety_analysis' is a deprecated alias of the
23493     `no_sanitize_address' attribute, new code should use
23494     `no_sanitize_address'.
23495
23496`regparm (NUMBER)'
23497     On the Intel 386, the `regparm' attribute causes the compiler to
23498     pass arguments number one to NUMBER if they are of integral type
23499     in registers EAX, EDX, and ECX instead of on the stack.  Functions
23500     that take a variable number of arguments continue to be passed all
23501     of their arguments on the stack.
23502
23503     Beware that on some ELF systems this attribute is unsuitable for
23504     global functions in shared libraries with lazy binding (which is
23505     the default).  Lazy binding sends the first call via resolving
23506     code in the loader, which might assume EAX, EDX and ECX can be
23507     clobbered, as per the standard calling conventions.  Solaris 8 is
23508     affected by this.  Systems with the GNU C Library version 2.1 or
23509     higher and FreeBSD are believed to be safe since the loaders there
23510     save EAX, EDX and ECX.  (Lazy binding can be disabled with the
23511     linker or the loader if desired, to avoid the problem.)
23512
23513`sseregparm'
23514     On the Intel 386 with SSE support, the `sseregparm' attribute
23515     causes the compiler to pass up to 3 floating-point arguments in
23516     SSE registers instead of on the stack.  Functions that take a
23517     variable number of arguments continue to pass all of their
23518     floating-point arguments on the stack.
23519
23520`force_align_arg_pointer'
23521     On the Intel x86, the `force_align_arg_pointer' attribute may be
23522     applied to individual function definitions, generating an alternate
23523     prologue and epilogue that realigns the run-time stack if
23524     necessary.  This supports mixing legacy codes that run with a
23525     4-byte aligned stack with modern codes that keep a 16-byte stack
23526     for SSE compatibility.
23527
23528`renesas'
23529     On SH targets this attribute specifies that the function or struct
23530     follows the Renesas ABI.
23531
23532`resbank'
23533     On the SH2A target, this attribute enables the high-speed register
23534     saving and restoration using a register bank for
23535     `interrupt_handler' routines.  Saving to the bank is performed
23536     automatically after the CPU accepts an interrupt that uses a
23537     register bank.
23538
23539     The nineteen 32-bit registers comprising general register R0 to
23540     R14, control register GBR, and system registers MACH, MACL, and PR
23541     and the vector table address offset are saved into a register
23542     bank.  Register banks are stacked in first-in last-out (FILO)
23543     sequence.  Restoration from the bank is executed by issuing a
23544     RESBANK instruction.
23545
23546`returns_twice'
23547     The `returns_twice' attribute tells the compiler that a function
23548     may return more than one time.  The compiler ensures that all
23549     registers are dead before calling such a function and emits a
23550     warning about the variables that may be clobbered after the second
23551     return from the function.  Examples of such functions are `setjmp'
23552     and `vfork'.  The `longjmp'-like counterpart of such function, if
23553     any, might need to be marked with the `noreturn' attribute.
23554
23555`saveall'
23556     Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to
23557     indicate that all registers except the stack pointer should be
23558     saved in the prologue regardless of whether they are used or not.
23559
23560`save_volatiles'
23561     Use this attribute on the MicroBlaze to indicate that the function
23562     is an interrupt handler.  All volatile registers (in addition to
23563     non-volatile registers) are saved in the function prologue.  If
23564     the function is a leaf function, only volatiles used by the
23565     function are saved.  A normal function return is generated instead
23566     of a return from interrupt.
23567
23568`section ("SECTION-NAME")'
23569     Normally, the compiler places the code it generates in the `text'
23570     section.  Sometimes, however, you need additional sections, or you
23571     need certain particular functions to appear in special sections.
23572     The `section' attribute specifies that a function lives in a
23573     particular section.  For example, the declaration:
23574
23575          extern void foobar (void) __attribute__ ((section ("bar")));
23576
23577     puts the function `foobar' in the `bar' section.
23578
23579     Some file formats do not support arbitrary sections so the
23580     `section' attribute is not available on all platforms.  If you
23581     need to map the entire contents of a module to a particular
23582     section, consider using the facilities of the linker instead.
23583
23584`sentinel'
23585     This function attribute ensures that a parameter in a function
23586     call is an explicit `NULL'.  The attribute is only valid on
23587     variadic functions.  By default, the sentinel is located at
23588     position zero, the last parameter of the function call.  If an
23589     optional integer position argument P is supplied to the attribute,
23590     the sentinel must be located at position P counting backwards from
23591     the end of the argument list.
23592
23593          __attribute__ ((sentinel))
23594          is equivalent to
23595          __attribute__ ((sentinel(0)))
23596
23597     The attribute is automatically set with a position of 0 for the
23598     built-in functions `execl' and `execlp'.  The built-in function
23599     `execle' has the attribute set with a position of 1.
23600
23601     A valid `NULL' in this context is defined as zero with any pointer
23602     type.  If your system defines the `NULL' macro with an integer type
23603     then you need to add an explicit cast.  GCC replaces `stddef.h'
23604     with a copy that redefines NULL appropriately.
23605
23606     The warnings for missing or incorrect sentinels are enabled with
23607     `-Wformat'.
23608
23609`short_call'
23610     See `long_call/short_call'.
23611
23612`shortcall'
23613     See `longcall/shortcall'.
23614
23615`signal'
23616     Use this attribute on the AVR to indicate that the specified
23617     function is an interrupt handler.  The compiler generates function
23618     entry and exit sequences suitable for use in an interrupt handler
23619     when this attribute is present.
23620
23621     See also the `interrupt' function attribute.
23622
23623     The AVR hardware globally disables interrupts when an interrupt is
23624     executed.  Interrupt handler functions defined with the `signal'
23625     attribute do not re-enable interrupts.  It is save to enable
23626     interrupts in a `signal' handler.  This "save" only applies to the
23627     code generated by the compiler and not to the IRQ layout of the
23628     application which is responsibility of the application.
23629
23630     If both `signal' and `interrupt' are specified for the same
23631     function, `signal' is silently ignored.
23632
23633`sp_switch'
23634     Use this attribute on the SH to indicate an `interrupt_handler'
23635     function should switch to an alternate stack.  It expects a string
23636     argument that names a global variable holding the address of the
23637     alternate stack.
23638
23639          void *alt_stack;
23640          void f () __attribute__ ((interrupt_handler,
23641                                    sp_switch ("alt_stack")));
23642
23643`stdcall'
23644     On the Intel 386, the `stdcall' attribute causes the compiler to
23645     assume that the called function pops off the stack space used to
23646     pass arguments, unless it takes a variable number of arguments.
23647
23648`syscall_linkage'
23649     This attribute is used to modify the IA-64 calling convention by
23650     marking all input registers as live at all function exits.  This
23651     makes it possible to restart a system call after an interrupt
23652     without having to save/restore the input registers.  This also
23653     prevents kernel data from leaking into application code.
23654
23655`target'
23656     The `target' attribute is used to specify that a function is to be
23657     compiled with different target options than specified on the
23658     command line.  This can be used for instance to have functions
23659     compiled with a different ISA (instruction set architecture) than
23660     the default.  You can also use the `#pragma GCC target' pragma to
23661     set more than one function to be compiled with specific target
23662     options.  *Note Function Specific Option Pragmas::, for details
23663     about the `#pragma GCC target' pragma.
23664
23665     For instance on a 386, you could compile one function with
23666     `target("sse4.1,arch=core2")' and another with
23667     `target("sse4a,arch=amdfam10")'.  This is equivalent to compiling
23668     the first function with `-msse4.1' and `-march=core2' options, and
23669     the second function with `-msse4a' and `-march=amdfam10' options.
23670     It is up to the user to make sure that a function is only invoked
23671     on a machine that supports the particular ISA it is compiled for
23672     (for example by using `cpuid' on 386 to determine what feature
23673     bits and architecture family are used).
23674
23675          int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
23676          int sse3_func (void) __attribute__ ((__target__ ("sse3")));
23677
23678     On the 386, the following options are allowed:
23679
23680    `abm'
23681    `no-abm'
23682          Enable/disable the generation of the advanced bit
23683          instructions.
23684
23685    `aes'
23686    `no-aes'
23687          Enable/disable the generation of the AES instructions.
23688
23689    `default'
23690          *Note Function Multiversioning::, where it is used to specify
23691          the default function version.
23692
23693    `mmx'
23694    `no-mmx'
23695          Enable/disable the generation of the MMX instructions.
23696
23697    `pclmul'
23698    `no-pclmul'
23699          Enable/disable the generation of the PCLMUL instructions.
23700
23701    `popcnt'
23702    `no-popcnt'
23703          Enable/disable the generation of the POPCNT instruction.
23704
23705    `sse'
23706    `no-sse'
23707          Enable/disable the generation of the SSE instructions.
23708
23709    `sse2'
23710    `no-sse2'
23711          Enable/disable the generation of the SSE2 instructions.
23712
23713    `sse3'
23714    `no-sse3'
23715          Enable/disable the generation of the SSE3 instructions.
23716
23717    `sse4'
23718    `no-sse4'
23719          Enable/disable the generation of the SSE4 instructions (both
23720          SSE4.1 and SSE4.2).
23721
23722    `sse4.1'
23723    `no-sse4.1'
23724          Enable/disable the generation of the sse4.1 instructions.
23725
23726    `sse4.2'
23727    `no-sse4.2'
23728          Enable/disable the generation of the sse4.2 instructions.
23729
23730    `sse4a'
23731    `no-sse4a'
23732          Enable/disable the generation of the SSE4A instructions.
23733
23734    `fma4'
23735    `no-fma4'
23736          Enable/disable the generation of the FMA4 instructions.
23737
23738    `xop'
23739    `no-xop'
23740          Enable/disable the generation of the XOP instructions.
23741
23742    `lwp'
23743    `no-lwp'
23744          Enable/disable the generation of the LWP instructions.
23745
23746    `ssse3'
23747    `no-ssse3'
23748          Enable/disable the generation of the SSSE3 instructions.
23749
23750    `cld'
23751    `no-cld'
23752          Enable/disable the generation of the CLD before string moves.
23753
23754    `fancy-math-387'
23755    `no-fancy-math-387'
23756          Enable/disable the generation of the `sin', `cos', and `sqrt'
23757          instructions on the 387 floating-point unit.
23758
23759    `fused-madd'
23760    `no-fused-madd'
23761          Enable/disable the generation of the fused multiply/add
23762          instructions.
23763
23764    `ieee-fp'
23765    `no-ieee-fp'
23766          Enable/disable the generation of floating point that depends
23767          on IEEE arithmetic.
23768
23769    `inline-all-stringops'
23770    `no-inline-all-stringops'
23771          Enable/disable inlining of string operations.
23772
23773    `inline-stringops-dynamically'
23774    `no-inline-stringops-dynamically'
23775          Enable/disable the generation of the inline code to do small
23776          string operations and calling the library routines for large
23777          operations.
23778
23779    `align-stringops'
23780    `no-align-stringops'
23781          Do/do not align destination of inlined string operations.
23782
23783    `recip'
23784    `no-recip'
23785          Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and
23786          RSQRTPS instructions followed an additional Newton-Raphson
23787          step instead of doing a floating-point division.
23788
23789    `arch=ARCH'
23790          Specify the architecture to generate code for in compiling
23791          the function.
23792
23793    `tune=TUNE'
23794          Specify the architecture to tune for in compiling the
23795          function.
23796
23797    `fpmath=FPMATH'
23798          Specify which floating-point unit to use.  The
23799          `target("fpmath=sse,387")' option must be specified as
23800          `target("fpmath=sse+387")' because the comma would separate
23801          different options.
23802
23803     On the PowerPC, the following options are allowed:
23804
23805    `altivec'
23806    `no-altivec'
23807          Generate code that uses (does not use) AltiVec instructions.
23808          In 32-bit code, you cannot enable AltiVec instructions unless
23809          `-mabi=altivec' is used on the command line.
23810
23811    `cmpb'
23812    `no-cmpb'
23813          Generate code that uses (does not use) the compare bytes
23814          instruction implemented on the POWER6 processor and other
23815          processors that support the PowerPC V2.05 architecture.
23816
23817    `dlmzb'
23818    `no-dlmzb'
23819          Generate code that uses (does not use) the string-search
23820          `dlmzb' instruction on the IBM 405, 440, 464 and 476
23821          processors.  This instruction is generated by default when
23822          targeting those processors.
23823
23824    `fprnd'
23825    `no-fprnd'
23826          Generate code that uses (does not use) the FP round to integer
23827          instructions implemented on the POWER5+ processor and other
23828          processors that support the PowerPC V2.03 architecture.
23829
23830    `hard-dfp'
23831    `no-hard-dfp'
23832          Generate code that uses (does not use) the decimal
23833          floating-point instructions implemented on some POWER
23834          processors.
23835
23836    `isel'
23837    `no-isel'
23838          Generate code that uses (does not use) ISEL instruction.
23839
23840    `mfcrf'
23841    `no-mfcrf'
23842          Generate code that uses (does not use) the move from condition
23843          register field instruction implemented on the POWER4
23844          processor and other processors that support the PowerPC V2.01
23845          architecture.
23846
23847    `mfpgpr'
23848    `no-mfpgpr'
23849          Generate code that uses (does not use) the FP move to/from
23850          general purpose register instructions implemented on the
23851          POWER6X processor and other processors that support the
23852          extended PowerPC V2.05 architecture.
23853
23854    `mulhw'
23855    `no-mulhw'
23856          Generate code that uses (does not use) the half-word multiply
23857          and multiply-accumulate instructions on the IBM 405, 440, 464
23858          and 476 processors.  These instructions are generated by
23859          default when targeting those processors.
23860
23861    `multiple'
23862    `no-multiple'
23863          Generate code that uses (does not use) the load multiple word
23864          instructions and the store multiple word instructions.
23865
23866    `update'
23867    `no-update'
23868          Generate code that uses (does not use) the load or store
23869          instructions that update the base register to the address of
23870          the calculated memory location.
23871
23872    `popcntb'
23873    `no-popcntb'
23874          Generate code that uses (does not use) the popcount and
23875          double-precision FP reciprocal estimate instruction
23876          implemented on the POWER5 processor and other processors that
23877          support the PowerPC V2.02 architecture.
23878
23879    `popcntd'
23880    `no-popcntd'
23881          Generate code that uses (does not use) the popcount
23882          instruction implemented on the POWER7 processor and other
23883          processors that support the PowerPC V2.06 architecture.
23884
23885    `powerpc-gfxopt'
23886    `no-powerpc-gfxopt'
23887          Generate code that uses (does not use) the optional PowerPC
23888          architecture instructions in the Graphics group, including
23889          floating-point select.
23890
23891    `powerpc-gpopt'
23892    `no-powerpc-gpopt'
23893          Generate code that uses (does not use) the optional PowerPC
23894          architecture instructions in the General Purpose group,
23895          including floating-point square root.
23896
23897    `recip-precision'
23898    `no-recip-precision'
23899          Assume (do not assume) that the reciprocal estimate
23900          instructions provide higher-precision estimates than is
23901          mandated by the powerpc ABI.
23902
23903    `string'
23904    `no-string'
23905          Generate code that uses (does not use) the load string
23906          instructions and the store string word instructions to save
23907          multiple registers and do small block moves.
23908
23909    `vsx'
23910    `no-vsx'
23911          Generate code that uses (does not use) vector/scalar (VSX)
23912          instructions, and also enable the use of built-in functions
23913          that allow more direct access to the VSX instruction set.  In
23914          32-bit code, you cannot enable VSX or AltiVec instructions
23915          unless `-mabi=altivec' is used on the command line.
23916
23917    `friz'
23918    `no-friz'
23919          Generate (do not generate) the `friz' instruction when the
23920          `-funsafe-math-optimizations' option is used to optimize
23921          rounding a floating-point value to 64-bit integer and back to
23922          floating point.  The `friz' instruction does not return the
23923          same value if the floating-point number is too large to fit
23924          in an integer.
23925
23926    `avoid-indexed-addresses'
23927    `no-avoid-indexed-addresses'
23928          Generate code that tries to avoid (not avoid) the use of
23929          indexed load or store instructions.
23930
23931    `paired'
23932    `no-paired'
23933          Generate code that uses (does not use) the generation of
23934          PAIRED simd instructions.
23935
23936    `longcall'
23937    `no-longcall'
23938          Generate code that assumes (does not assume) that all calls
23939          are far away so that a longer more expensive calling sequence
23940          is required.
23941
23942    `cpu=CPU'
23943          Specify the architecture to generate code for when compiling
23944          the function.  If you select the `target("cpu=power7")'
23945          attribute when generating 32-bit code, VSX and AltiVec
23946          instructions are not generated unless you use the
23947          `-mabi=altivec' option on the command line.
23948
23949    `tune=TUNE'
23950          Specify the architecture to tune for when compiling the
23951          function.  If you do not specify the `target("tune=TUNE")'
23952          attribute and you do specify the `target("cpu=CPU")'
23953          attribute, compilation tunes for the CPU architecture, and
23954          not the default tuning specified on the command line.
23955
23956     On the 386/x86_64 and PowerPC back ends, you can use either
23957     multiple strings to specify multiple options, or you can separate
23958     the option with a comma (`,').
23959
23960     On the 386/x86_64 and PowerPC back ends, the inliner does not
23961     inline a function that has different target options than the
23962     caller, unless the callee has a subset of the target options of
23963     the caller.  For example a function declared with `target("sse3")'
23964     can inline a function with `target("sse2")', since `-msse3'
23965     implies `-msse2'.
23966
23967     The `target' attribute is not implemented in GCC versions earlier
23968     than 4.4 for the i386/x86_64 and 4.6 for the PowerPC back ends.
23969     It is not currently implemented for other back ends.
23970
23971`tiny_data'
23972     Use this attribute on the H8/300H and H8S to indicate that the
23973     specified variable should be placed into the tiny data section.
23974     The compiler generates more efficient code for loads and stores on
23975     data in the tiny data section.  Note the tiny data area is limited
23976     to slightly under 32KB of data.
23977
23978`trap_exit'
23979     Use this attribute on the SH for an `interrupt_handler' to return
23980     using `trapa' instead of `rte'.  This attribute expects an integer
23981     argument specifying the trap number to be used.
23982
23983`trapa_handler'
23984     On SH targets this function attribute is similar to
23985     `interrupt_handler' but it does not save and restore all registers.
23986
23987`unused'
23988     This attribute, attached to a function, means that the function is
23989     meant to be possibly unused.  GCC does not produce a warning for
23990     this function.
23991
23992`used'
23993     This attribute, attached to a function, means that code must be
23994     emitted for the function even if it appears that the function is
23995     not referenced.  This is useful, for example, when the function is
23996     referenced only in inline assembly.
23997
23998     When applied to a member function of a C++ class template, the
23999     attribute also means that the function is instantiated if the
24000     class itself is instantiated.
24001
24002`version_id'
24003     This IA-64 HP-UX attribute, attached to a global variable or
24004     function, renames a symbol to contain a version string, thus
24005     allowing for function level versioning.  HP-UX system header files
24006     may use version level functioning for some system calls.
24007
24008          extern int foo () __attribute__((version_id ("20040821")));
24009
24010     Calls to FOO are mapped to calls to FOO{20040821}.
24011
24012`visibility ("VISIBILITY_TYPE")'
24013     This attribute affects the linkage of the declaration to which it
24014     is attached.  There are four supported VISIBILITY_TYPE values:
24015     default, hidden, protected or internal visibility.
24016
24017          void __attribute__ ((visibility ("protected")))
24018          f () { /* Do something. */; }
24019          int i __attribute__ ((visibility ("hidden")));
24020
24021     The possible values of VISIBILITY_TYPE correspond to the
24022     visibility settings in the ELF gABI.
24023
24024    "default"
24025          Default visibility is the normal case for the object file
24026          format.  This value is available for the visibility attribute
24027          to override other options that may change the assumed
24028          visibility of entities.
24029
24030          On ELF, default visibility means that the declaration is
24031          visible to other modules and, in shared libraries, means that
24032          the declared entity may be overridden.
24033
24034          On Darwin, default visibility means that the declaration is
24035          visible to other modules.
24036
24037          Default visibility corresponds to "external linkage" in the
24038          language.
24039
24040    "hidden"
24041          Hidden visibility indicates that the entity declared has a new
24042          form of linkage, which we call "hidden linkage".  Two
24043          declarations of an object with hidden linkage refer to the
24044          same object if they are in the same shared object.
24045
24046    "internal"
24047          Internal visibility is like hidden visibility, but with
24048          additional processor specific semantics.  Unless otherwise
24049          specified by the psABI, GCC defines internal visibility to
24050          mean that a function is _never_ called from another module.
24051          Compare this with hidden functions which, while they cannot
24052          be referenced directly by other modules, can be referenced
24053          indirectly via function pointers.  By indicating that a
24054          function cannot be called from outside the module, GCC may
24055          for instance omit the load of a PIC register since it is known
24056          that the calling function loaded the correct value.
24057
24058    "protected"
24059          Protected visibility is like default visibility except that it
24060          indicates that references within the defining module bind to
24061          the definition in that module.  That is, the declared entity
24062          cannot be overridden by another module.
24063
24064
24065     All visibilities are supported on many, but not all, ELF targets
24066     (supported when the assembler supports the `.visibility'
24067     pseudo-op).  Default visibility is supported everywhere.  Hidden
24068     visibility is supported on Darwin targets.
24069
24070     The visibility attribute should be applied only to declarations
24071     that would otherwise have external linkage.  The attribute should
24072     be applied consistently, so that the same entity should not be
24073     declared with different settings of the attribute.
24074
24075     In C++, the visibility attribute applies to types as well as
24076     functions and objects, because in C++ types have linkage.  A class
24077     must not have greater visibility than its non-static data member
24078     types and bases, and class members default to the visibility of
24079     their class.  Also, a declaration without explicit visibility is
24080     limited to the visibility of its type.
24081
24082     In C++, you can mark member functions and static member variables
24083     of a class with the visibility attribute.  This is useful if you
24084     know a particular method or static member variable should only be
24085     used from one shared object; then you can mark it hidden while the
24086     rest of the class has default visibility.  Care must be taken to
24087     avoid breaking the One Definition Rule; for example, it is usually
24088     not useful to mark an inline method as hidden without marking the
24089     whole class as hidden.
24090
24091     A C++ namespace declaration can also have the visibility attribute.
24092     This attribute applies only to the particular namespace body, not
24093     to other definitions of the same namespace; it is equivalent to
24094     using `#pragma GCC visibility' before and after the namespace
24095     definition (*note Visibility Pragmas::).
24096
24097     In C++, if a template argument has limited visibility, this
24098     restriction is implicitly propagated to the template instantiation.
24099     Otherwise, template instantiations and specializations default to
24100     the visibility of their template.
24101
24102     If both the template and enclosing class have explicit visibility,
24103     the visibility from the template is used.
24104
24105`vliw'
24106     On MeP, the `vliw' attribute tells the compiler to emit
24107     instructions in VLIW mode instead of core mode.  Note that this
24108     attribute is not allowed unless a VLIW coprocessor has been
24109     configured and enabled through command-line options.
24110
24111`warn_unused_result'
24112     The `warn_unused_result' attribute causes a warning to be emitted
24113     if a caller of the function with this attribute does not use its
24114     return value.  This is useful for functions where not checking the
24115     result is either a security problem or always a bug, such as
24116     `realloc'.
24117
24118          int fn () __attribute__ ((warn_unused_result));
24119          int foo ()
24120          {
24121            if (fn () < 0) return -1;
24122            fn ();
24123            return 0;
24124          }
24125
24126     results in warning on line 5.
24127
24128`weak'
24129     The `weak' attribute causes the declaration to be emitted as a weak
24130     symbol rather than a global.  This is primarily useful in defining
24131     library functions that can be overridden in user code, though it
24132     can also be used with non-function declarations.  Weak symbols are
24133     supported for ELF targets, and also for a.out targets when using
24134     the GNU assembler and linker.
24135
24136`weakref'
24137`weakref ("TARGET")'
24138     The `weakref' attribute marks a declaration as a weak reference.
24139     Without arguments, it should be accompanied by an `alias' attribute
24140     naming the target symbol.  Optionally, the TARGET may be given as
24141     an argument to `weakref' itself.  In either case, `weakref'
24142     implicitly marks the declaration as `weak'.  Without a TARGET,
24143     given as an argument to `weakref' or to `alias', `weakref' is
24144     equivalent to `weak'.
24145
24146          static int x() __attribute__ ((weakref ("y")));
24147          /* is equivalent to... */
24148          static int x() __attribute__ ((weak, weakref, alias ("y")));
24149          /* and to... */
24150          static int x() __attribute__ ((weakref));
24151          static int x() __attribute__ ((alias ("y")));
24152
24153     A weak reference is an alias that does not by itself require a
24154     definition to be given for the target symbol.  If the target
24155     symbol is only referenced through weak references, then it becomes
24156     a `weak' undefined symbol.  If it is directly referenced, however,
24157     then such strong references prevail, and a definition is required
24158     for the symbol, not necessarily in the same translation unit.
24159
24160     The effect is equivalent to moving all references to the alias to a
24161     separate translation unit, renaming the alias to the aliased
24162     symbol, declaring it as weak, compiling the two separate
24163     translation units and performing a reloadable link on them.
24164
24165     At present, a declaration to which `weakref' is attached can only
24166     be `static'.
24167
24168
24169 You can specify multiple attributes in a declaration by separating them
24170by commas within the double parentheses or by immediately following an
24171attribute declaration with another attribute declaration.
24172
24173 Some people object to the `__attribute__' feature, suggesting that ISO
24174C's `#pragma' should be used instead.  At the time `__attribute__' was
24175designed, there were two reasons for not doing this.
24176
24177  1. It is impossible to generate `#pragma' commands from a macro.
24178
24179  2. There is no telling what the same `#pragma' might mean in another
24180     compiler.
24181
24182 These two reasons applied to almost any application that might have
24183been proposed for `#pragma'.  It was basically a mistake to use
24184`#pragma' for _anything_.
24185
24186 The ISO C99 standard includes `_Pragma', which now allows pragmas to
24187be generated from macros.  In addition, a `#pragma GCC' namespace is
24188now in use for GCC-specific pragmas.  However, it has been found
24189convenient to use `__attribute__' to achieve a natural attachment of
24190attributes to their corresponding declarations, whereas `#pragma GCC'
24191is of use for constructs that do not naturally form part of the
24192grammar.  *Note Pragmas Accepted by GCC: Pragmas.
24193
24194
24195File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Function Attributes,  Up: C Extensions
24196
241976.31 Attribute Syntax
24198=====================
24199
24200This section describes the syntax with which `__attribute__' may be
24201used, and the constructs to which attribute specifiers bind, for the C
24202language.  Some details may vary for C++ and Objective-C.  Because of
24203infelicities in the grammar for attributes, some forms described here
24204may not be successfully parsed in all cases.
24205
24206 There are some problems with the semantics of attributes in C++.  For
24207example, there are no manglings for attributes, although they may affect
24208code generation, so problems may arise when attributed types are used in
24209conjunction with templates or overloading.  Similarly, `typeid' does
24210not distinguish between types with different attributes.  Support for
24211attributes in C++ may be restricted in future to attributes on
24212declarations only, but not on nested declarators.
24213
24214 *Note Function Attributes::, for details of the semantics of attributes
24215applying to functions.  *Note Variable Attributes::, for details of the
24216semantics of attributes applying to variables.  *Note Type Attributes::,
24217for details of the semantics of attributes applying to structure, union
24218and enumerated types.
24219
24220 An "attribute specifier" is of the form `__attribute__
24221((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
24222comma-separated sequence of "attributes", where each attribute is one
24223of the following:
24224
24225   * Empty.  Empty attributes are ignored.
24226
24227   * A word (which may be an identifier such as `unused', or a reserved
24228     word such as `const').
24229
24230   * A word, followed by, in parentheses, parameters for the attribute.
24231     These parameters take one of the following forms:
24232
24233        * An identifier.  For example, `mode' attributes use this form.
24234
24235        * An identifier followed by a comma and a non-empty
24236          comma-separated list of expressions.  For example, `format'
24237          attributes use this form.
24238
24239        * A possibly empty comma-separated list of expressions.  For
24240          example, `format_arg' attributes use this form with the list
24241          being a single integer constant expression, and `alias'
24242          attributes use this form with the list being a single string
24243          constant.
24244
24245 An "attribute specifier list" is a sequence of one or more attribute
24246specifiers, not separated by any other tokens.
24247
24248 In GNU C, an attribute specifier list may appear after the colon
24249following a label, other than a `case' or `default' label.  The only
24250attribute it makes sense to use after a label is `unused'.  This
24251feature is intended for program-generated code that may contain unused
24252labels, but which is compiled with `-Wall'.  It is not normally
24253appropriate to use in it human-written code, though it could be useful
24254in cases where the code that jumps to the label is contained within an
24255`#ifdef' conditional.  GNU C++ only permits attributes on labels if the
24256attribute specifier is immediately followed by a semicolon (i.e., the
24257label applies to an empty statement).  If the semicolon is missing, C++
24258label attributes are ambiguous, as it is permissible for a declaration,
24259which could begin with an attribute list, to be labelled in C++.
24260Declarations cannot be labelled in C90 or C99, so the ambiguity does
24261not arise there.
24262
24263 An attribute specifier list may appear as part of a `struct', `union'
24264or `enum' specifier.  It may go either immediately after the `struct',
24265`union' or `enum' keyword, or after the closing brace.  The former
24266syntax is preferred.  Where attribute specifiers follow the closing
24267brace, they are considered to relate to the structure, union or
24268enumerated type defined, not to any enclosing declaration the type
24269specifier appears in, and the type defined is not complete until after
24270the attribute specifiers.
24271
24272 Otherwise, an attribute specifier appears as part of a declaration,
24273counting declarations of unnamed parameters and type names, and relates
24274to that declaration (which may be nested in another declaration, for
24275example in the case of a parameter declaration), or to a particular
24276declarator within a declaration.  Where an attribute specifier is
24277applied to a parameter declared as a function or an array, it should
24278apply to the function or array rather than the pointer to which the
24279parameter is implicitly converted, but this is not yet correctly
24280implemented.
24281
24282 Any list of specifiers and qualifiers at the start of a declaration may
24283contain attribute specifiers, whether or not such a list may in that
24284context contain storage class specifiers.  (Some attributes, however,
24285are essentially in the nature of storage class specifiers, and only make
24286sense where storage class specifiers may be used; for example,
24287`section'.)  There is one necessary limitation to this syntax: the
24288first old-style parameter declaration in a function definition cannot
24289begin with an attribute specifier, because such an attribute applies to
24290the function instead by syntax described below (which, however, is not
24291yet implemented in this case).  In some other cases, attribute
24292specifiers are permitted by this grammar but not yet supported by the
24293compiler.  All attribute specifiers in this place relate to the
24294declaration as a whole.  In the obsolescent usage where a type of `int'
24295is implied by the absence of type specifiers, such a list of specifiers
24296and qualifiers may be an attribute specifier list with no other
24297specifiers or qualifiers.
24298
24299 At present, the first parameter in a function prototype must have some
24300type specifier that is not an attribute specifier; this resolves an
24301ambiguity in the interpretation of `void f(int (__attribute__((foo))
24302x))', but is subject to change.  At present, if the parentheses of a
24303function declarator contain only attributes then those attributes are
24304ignored, rather than yielding an error or warning or implying a single
24305parameter of type int, but this is subject to change.
24306
24307 An attribute specifier list may appear immediately before a declarator
24308(other than the first) in a comma-separated list of declarators in a
24309declaration of more than one identifier using a single list of
24310specifiers and qualifiers.  Such attribute specifiers apply only to the
24311identifier before whose declarator they appear.  For example, in
24312
24313     __attribute__((noreturn)) void d0 (void),
24314         __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
24315          d2 (void)
24316
24317the `noreturn' attribute applies to all the functions declared; the
24318`format' attribute only applies to `d1'.
24319
24320 An attribute specifier list may appear immediately before the comma,
24321`=' or semicolon terminating the declaration of an identifier other
24322than a function definition.  Such attribute specifiers apply to the
24323declared object or function.  Where an assembler name for an object or
24324function is specified (*note Asm Labels::), the attribute must follow
24325the `asm' specification.
24326
24327 An attribute specifier list may, in future, be permitted to appear
24328after the declarator in a function definition (before any old-style
24329parameter declarations or the function body).
24330
24331 Attribute specifiers may be mixed with type qualifiers appearing inside
24332the `[]' of a parameter array declarator, in the C99 construct by which
24333such qualifiers are applied to the pointer to which the array is
24334implicitly converted.  Such attribute specifiers apply to the pointer,
24335not to the array, but at present this is not implemented and they are
24336ignored.
24337
24338 An attribute specifier list may appear at the start of a nested
24339declarator.  At present, there are some limitations in this usage: the
24340attributes correctly apply to the declarator, but for most individual
24341attributes the semantics this implies are not implemented.  When
24342attribute specifiers follow the `*' of a pointer declarator, they may
24343be mixed with any type qualifiers present.  The following describes the
24344formal semantics of this syntax.  It makes the most sense if you are
24345familiar with the formal specification of declarators in the ISO C
24346standard.
24347
24348 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1',
24349where `T' contains declaration specifiers that specify a type TYPE
24350(such as `int') and `D1' is a declarator that contains an identifier
24351IDENT.  The type specified for IDENT for derived declarators whose type
24352does not include an attribute specifier is as in the ISO C standard.
24353
24354 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the
24355declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
24356TYPE" for IDENT, then `T D1' specifies the type
24357"DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
24358
24359 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST
24360D', and the declaration `T D' specifies the type
24361"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies
24362the type "DERIVED-DECLARATOR-TYPE-LIST
24363TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT.
24364
24365 For example,
24366
24367     void (__attribute__((noreturn)) ****f) (void);
24368
24369specifies the type "pointer to pointer to pointer to pointer to
24370non-returning function returning `void'".  As another example,
24371
24372     char *__attribute__((aligned(8))) *f;
24373
24374specifies the type "pointer to 8-byte-aligned pointer to `char'".  Note
24375again that this does not work with most attributes; for example, the
24376usage of `aligned' and `noreturn' attributes given above is not yet
24377supported.
24378
24379 For compatibility with existing code written for compiler versions that
24380did not implement attributes on nested declarators, some laxity is
24381allowed in the placing of attributes.  If an attribute that only applies
24382to types is applied to a declaration, it is treated as applying to the
24383type of that declaration.  If an attribute that only applies to
24384declarations is applied to the type of a declaration, it is treated as
24385applying to that declaration; and, for compatibility with code placing
24386the attributes immediately before the identifier declared, such an
24387attribute applied to a function return type is treated as applying to
24388the function type, and such an attribute applied to an array element
24389type is treated as applying to the array type.  If an attribute that
24390only applies to function types is applied to a pointer-to-function
24391type, it is treated as applying to the pointer target type; if such an
24392attribute is applied to a function return type that is not a
24393pointer-to-function type, it is treated as applying to the function
24394type.
24395
24396
24397File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions
24398
243996.32 Prototypes and Old-Style Function Definitions
24400==================================================
24401
24402GNU C extends ISO C to allow a function prototype to override a later
24403old-style non-prototype definition.  Consider the following example:
24404
24405     /* Use prototypes unless the compiler is old-fashioned.  */
24406     #ifdef __STDC__
24407     #define P(x) x
24408     #else
24409     #define P(x) ()
24410     #endif
24411
24412     /* Prototype function declaration.  */
24413     int isroot P((uid_t));
24414
24415     /* Old-style function definition.  */
24416     int
24417     isroot (x)   /* ??? lossage here ??? */
24418          uid_t x;
24419     {
24420       return x == 0;
24421     }
24422
24423 Suppose the type `uid_t' happens to be `short'.  ISO C does not allow
24424this example, because subword arguments in old-style non-prototype
24425definitions are promoted.  Therefore in this example the function
24426definition's argument is really an `int', which does not match the
24427prototype argument type of `short'.
24428
24429 This restriction of ISO C makes it hard to write code that is portable
24430to traditional C compilers, because the programmer does not know
24431whether the `uid_t' type is `short', `int', or `long'.  Therefore, in
24432cases like these GNU C allows a prototype to override a later old-style
24433definition.  More precisely, in GNU C, a function prototype argument
24434type overrides the argument type specified by a later old-style
24435definition if the former type is the same as the latter type before
24436promotion.  Thus in GNU C the above example is equivalent to the
24437following:
24438
24439     int isroot (uid_t);
24440
24441     int
24442     isroot (uid_t x)
24443     {
24444       return x == 0;
24445     }
24446
24447GNU C++ does not support old-style function definitions, so this
24448extension is irrelevant.
24449
24450
24451File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
24452
244536.33 C++ Style Comments
24454=======================
24455
24456In GNU C, you may use C++ style comments, which start with `//' and
24457continue until the end of the line.  Many other C implementations allow
24458such comments, and they are included in the 1999 C standard.  However,
24459C++ style comments are not recognized if you specify an `-std' option
24460specifying a version of ISO C before C99, or `-ansi' (equivalent to
24461`-std=c90').
24462
24463
24464File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
24465
244666.34 Dollar Signs in Identifier Names
24467=====================================
24468
24469In GNU C, you may normally use dollar signs in identifier names.  This
24470is because many traditional C implementations allow such identifiers.
24471However, dollar signs in identifiers are not supported on a few target
24472machines, typically because the target assembler does not allow them.
24473
24474
24475File: gcc.info,  Node: Character Escapes,  Next: Variable Attributes,  Prev: Dollar Signs,  Up: C Extensions
24476
244776.35 The Character <ESC> in Constants
24478=====================================
24479
24480You can use the sequence `\e' in a string or character constant to
24481stand for the ASCII character <ESC>.
24482
24483
24484File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Character Escapes,  Up: C Extensions
24485
244866.36 Specifying Attributes of Variables
24487=======================================
24488
24489The keyword `__attribute__' allows you to specify special attributes of
24490variables or structure fields.  This keyword is followed by an
24491attribute specification inside double parentheses.  Some attributes are
24492currently defined generically for variables.  Other attributes are
24493defined for variables on particular target systems.  Other attributes
24494are available for functions (*note Function Attributes::) and for types
24495(*note Type Attributes::).  Other front ends might define more
24496attributes (*note Extensions to the C++ Language: C++ Extensions.).
24497
24498 You may also specify attributes with `__' preceding and following each
24499keyword.  This allows you to use them in header files without being
24500concerned about a possible macro of the same name.  For example, you
24501may use `__aligned__' instead of `aligned'.
24502
24503 *Note Attribute Syntax::, for details of the exact syntax for using
24504attributes.
24505
24506`aligned (ALIGNMENT)'
24507     This attribute specifies a minimum alignment for the variable or
24508     structure field, measured in bytes.  For example, the declaration:
24509
24510          int x __attribute__ ((aligned (16))) = 0;
24511
24512     causes the compiler to allocate the global variable `x' on a
24513     16-byte boundary.  On a 68040, this could be used in conjunction
24514     with an `asm' expression to access the `move16' instruction which
24515     requires 16-byte aligned operands.
24516
24517     You can also specify the alignment of structure fields.  For
24518     example, to create a double-word aligned `int' pair, you could
24519     write:
24520
24521          struct foo { int x[2] __attribute__ ((aligned (8))); };
24522
24523     This is an alternative to creating a union with a `double' member,
24524     which forces the union to be double-word aligned.
24525
24526     As in the preceding examples, you can explicitly specify the
24527     alignment (in bytes) that you wish the compiler to use for a given
24528     variable or structure field.  Alternatively, you can leave out the
24529     alignment factor and just ask the compiler to align a variable or
24530     field to the default alignment for the target architecture you are
24531     compiling for.  The default alignment is sufficient for all scalar
24532     types, but may not be enough for all vector types on a target that
24533     supports vector operations.  The default alignment is fixed for a
24534     particular target ABI.
24535
24536     GCC also provides a target specific macro `__BIGGEST_ALIGNMENT__',
24537     which is the largest alignment ever used for any data type on the
24538     target machine you are compiling for.  For example, you could
24539     write:
24540
24541          short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)));
24542
24543     The compiler automatically sets the alignment for the declared
24544     variable or field to `__BIGGEST_ALIGNMENT__'.  Doing this can
24545     often make copy operations more efficient, because the compiler can
24546     use whatever instructions copy the biggest chunks of memory when
24547     performing copies to or from the variables or fields that you have
24548     aligned this way.  Note that the value of `__BIGGEST_ALIGNMENT__'
24549     may change depending on command-line options.
24550
24551     When used on a struct, or struct member, the `aligned' attribute
24552     can only increase the alignment; in order to decrease it, the
24553     `packed' attribute must be specified as well.  When used as part
24554     of a typedef, the `aligned' attribute can both increase and
24555     decrease alignment, and specifying the `packed' attribute
24556     generates a warning.
24557
24558     Note that the effectiveness of `aligned' attributes may be limited
24559     by inherent limitations in your linker.  On many systems, the
24560     linker is only able to arrange for variables to be aligned up to a
24561     certain maximum alignment.  (For some linkers, the maximum
24562     supported alignment may be very very small.)  If your linker is
24563     only able to align variables up to a maximum of 8-byte alignment,
24564     then specifying `aligned(16)' in an `__attribute__' still only
24565     provides you with 8-byte alignment.  See your linker documentation
24566     for further information.
24567
24568     The `aligned' attribute can also be used for functions (*note
24569     Function Attributes::.)
24570
24571`cleanup (CLEANUP_FUNCTION)'
24572     The `cleanup' attribute runs a function when the variable goes out
24573     of scope.  This attribute can only be applied to auto function
24574     scope variables; it may not be applied to parameters or variables
24575     with static storage duration.  The function must take one
24576     parameter, a pointer to a type compatible with the variable.  The
24577     return value of the function (if any) is ignored.
24578
24579     If `-fexceptions' is enabled, then CLEANUP_FUNCTION is run during
24580     the stack unwinding that happens during the processing of the
24581     exception.  Note that the `cleanup' attribute does not allow the
24582     exception to be caught, only to perform an action.  It is
24583     undefined what happens if CLEANUP_FUNCTION does not return
24584     normally.
24585
24586`common'
24587`nocommon'
24588     The `common' attribute requests GCC to place a variable in
24589     "common" storage.  The `nocommon' attribute requests the
24590     opposite--to allocate space for it directly.
24591
24592     These attributes override the default chosen by the `-fno-common'
24593     and `-fcommon' flags respectively.
24594
24595`deprecated'
24596`deprecated (MSG)'
24597     The `deprecated' attribute results in a warning if the variable is
24598     used anywhere in the source file.  This is useful when identifying
24599     variables that are expected to be removed in a future version of a
24600     program.  The warning also includes the location of the declaration
24601     of the deprecated variable, to enable users to easily find further
24602     information about why the variable is deprecated, or what they
24603     should do instead.  Note that the warning only occurs for uses:
24604
24605          extern int old_var __attribute__ ((deprecated));
24606          extern int old_var;
24607          int new_fn () { return old_var; }
24608
24609     results in a warning on line 3 but not line 2.  The optional MSG
24610     argument, which must be a string, is printed in the warning if
24611     present.
24612
24613     The `deprecated' attribute can also be used for functions and
24614     types (*note Function Attributes::, *note Type Attributes::.)
24615
24616`mode (MODE)'
24617     This attribute specifies the data type for the
24618     declaration--whichever type corresponds to the mode MODE.  This in
24619     effect lets you request an integer or floating-point type
24620     according to its width.
24621
24622     You may also specify a mode of `byte' or `__byte__' to indicate
24623     the mode corresponding to a one-byte integer, `word' or `__word__'
24624     for the mode of a one-word integer, and `pointer' or `__pointer__'
24625     for the mode used to represent pointers.
24626
24627`packed'
24628     The `packed' attribute specifies that a variable or structure field
24629     should have the smallest possible alignment--one byte for a
24630     variable, and one bit for a field, unless you specify a larger
24631     value with the `aligned' attribute.
24632
24633     Here is a structure in which the field `x' is packed, so that it
24634     immediately follows `a':
24635
24636          struct foo
24637          {
24638            char a;
24639            int x[2] __attribute__ ((packed));
24640          };
24641
24642     _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the `packed'
24643     attribute on bit-fields of type `char'.  This has been fixed in
24644     GCC 4.4 but the change can lead to differences in the structure
24645     layout.  See the documentation of `-Wpacked-bitfield-compat' for
24646     more information.
24647
24648`section ("SECTION-NAME")'
24649     Normally, the compiler places the objects it generates in sections
24650     like `data' and `bss'.  Sometimes, however, you need additional
24651     sections, or you need certain particular variables to appear in
24652     special sections, for example to map to special hardware.  The
24653     `section' attribute specifies that a variable (or function) lives
24654     in a particular section.  For example, this small program uses
24655     several specific section names:
24656
24657          struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
24658          struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
24659          char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
24660          int init_data __attribute__ ((section ("INITDATA")));
24661
24662          main()
24663          {
24664            /* Initialize stack pointer */
24665            init_sp (stack + sizeof (stack));
24666
24667            /* Initialize initialized data */
24668            memcpy (&init_data, &data, &edata - &data);
24669
24670            /* Turn on the serial ports */
24671            init_duart (&a);
24672            init_duart (&b);
24673          }
24674
24675     Use the `section' attribute with _global_ variables and not
24676     _local_ variables, as shown in the example.
24677
24678     You may use the `section' attribute with initialized or
24679     uninitialized global variables but the linker requires each object
24680     be defined once, with the exception that uninitialized variables
24681     tentatively go in the `common' (or `bss') section and can be
24682     multiply "defined".  Using the `section' attribute changes what
24683     section the variable goes into and may cause the linker to issue
24684     an error if an uninitialized variable has multiple definitions.
24685     You can force a variable to be initialized with the `-fno-common'
24686     flag or the `nocommon' attribute.
24687
24688     Some file formats do not support arbitrary sections so the
24689     `section' attribute is not available on all platforms.  If you
24690     need to map the entire contents of a module to a particular
24691     section, consider using the facilities of the linker instead.
24692
24693`shared'
24694     On Microsoft Windows, in addition to putting variable definitions
24695     in a named section, the section can also be shared among all
24696     running copies of an executable or DLL.  For example, this small
24697     program defines shared data by putting it in a named section
24698     `shared' and marking the section shareable:
24699
24700          int foo __attribute__((section ("shared"), shared)) = 0;
24701
24702          int
24703          main()
24704          {
24705            /* Read and write foo.  All running
24706               copies see the same value.  */
24707            return 0;
24708          }
24709
24710     You may only use the `shared' attribute along with `section'
24711     attribute with a fully-initialized global definition because of
24712     the way linkers work.  See `section' attribute for more
24713     information.
24714
24715     The `shared' attribute is only available on Microsoft Windows.
24716
24717`tls_model ("TLS_MODEL")'
24718     The `tls_model' attribute sets thread-local storage model (*note
24719     Thread-Local::) of a particular `__thread' variable, overriding
24720     `-ftls-model=' command-line switch on a per-variable basis.  The
24721     TLS_MODEL argument should be one of `global-dynamic',
24722     `local-dynamic', `initial-exec' or `local-exec'.
24723
24724     Not all targets support this attribute.
24725
24726`unused'
24727     This attribute, attached to a variable, means that the variable is
24728     meant to be possibly unused.  GCC does not produce a warning for
24729     this variable.
24730
24731`used'
24732     This attribute, attached to a variable, means that the variable
24733     must be emitted even if it appears that the variable is not
24734     referenced.
24735
24736     When applied to a static data member of a C++ class template, the
24737     attribute also means that the member is instantiated if the class
24738     itself is instantiated.
24739
24740`vector_size (BYTES)'
24741     This attribute specifies the vector size for the variable,
24742     measured in bytes.  For example, the declaration:
24743
24744          int foo __attribute__ ((vector_size (16)));
24745
24746     causes the compiler to set the mode for `foo', to be 16 bytes,
24747     divided into `int' sized units.  Assuming a 32-bit int (a vector of
24748     4 units of 4 bytes), the corresponding mode of `foo' is V4SI.
24749
24750     This attribute is only applicable to integral and float scalars,
24751     although arrays, pointers, and function return values are allowed
24752     in conjunction with this construct.
24753
24754     Aggregates with this attribute are invalid, even if they are of
24755     the same size as a corresponding scalar.  For example, the
24756     declaration:
24757
24758          struct S { int a; };
24759          struct S  __attribute__ ((vector_size (16))) foo;
24760
24761     is invalid even if the size of the structure is the same as the
24762     size of the `int'.
24763
24764`selectany'
24765     The `selectany' attribute causes an initialized global variable to
24766     have link-once semantics.  When multiple definitions of the
24767     variable are encountered by the linker, the first is selected and
24768     the remainder are discarded.  Following usage by the Microsoft
24769     compiler, the linker is told _not_ to warn about size or content
24770     differences of the multiple definitions.
24771
24772     Although the primary usage of this attribute is for POD types, the
24773     attribute can also be applied to global C++ objects that are
24774     initialized by a constructor.  In this case, the static
24775     initialization and destruction code for the object is emitted in
24776     each translation defining the object, but the calls to the
24777     constructor and destructor are protected by a link-once guard
24778     variable.
24779
24780     The `selectany' attribute is only available on Microsoft Windows
24781     targets.  You can use `__declspec (selectany)' as a synonym for
24782     `__attribute__ ((selectany))' for compatibility with other
24783     compilers.
24784
24785`weak'
24786     The `weak' attribute is described in *note Function Attributes::.
24787
24788`dllimport'
24789     The `dllimport' attribute is described in *note Function
24790     Attributes::.
24791
24792`dllexport'
24793     The `dllexport' attribute is described in *note Function
24794     Attributes::.
24795
24796
247976.36.1 AVR Variable Attributes
24798------------------------------
24799
24800`progmem'
24801     The `progmem' attribute is used on the AVR to place read-only data
24802     in the non-volatile program memory (flash). The `progmem'
24803     attribute accomplishes this by putting respective variables into a
24804     section whose name starts with `.progmem'.
24805
24806     This attribute works similar to the `section' attribute but adds
24807     additional checking. Notice that just like the `section'
24808     attribute, `progmem' affects the location of the data but not how
24809     this data is accessed.
24810
24811     In order to read data located with the `progmem' attribute
24812     (inline) assembler must be used.
24813          /* Use custom macros from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) */
24814          #include <avr/pgmspace.h>
24815
24816          /* Locate var in flash memory */
24817          const int var[2] PROGMEM = { 1, 2 };
24818
24819          int read_var (int i)
24820          {
24821              /* Access var[] by accessor macro from avr/pgmspace.h */
24822              return (int) pgm_read_word (& var[i]);
24823          }
24824
24825     AVR is a Harvard architecture processor and data and read-only data
24826     normally resides in the data memory (RAM).
24827
24828     See also the *note AVR Named Address Spaces:: section for an
24829     alternate way to locate and access data in flash memory.
24830
248316.36.2 Blackfin Variable Attributes
24832-----------------------------------
24833
24834Three attributes are currently defined for the Blackfin.
24835
24836`l1_data'
24837`l1_data_A'
24838`l1_data_B'
24839     Use these attributes on the Blackfin to place the variable into L1
24840     Data SRAM.  Variables with `l1_data' attribute are put into the
24841     specific section named `.l1.data'. Those with `l1_data_A'
24842     attribute are put into the specific section named `.l1.data.A'.
24843     Those with `l1_data_B' attribute are put into the specific section
24844     named `.l1.data.B'.
24845
24846`l2'
24847     Use this attribute on the Blackfin to place the variable into L2
24848     SRAM.  Variables with `l2' attribute are put into the specific
24849     section named `.l2.data'.
24850
248516.36.3 M32R/D Variable Attributes
24852---------------------------------
24853
24854One attribute is currently defined for the M32R/D.
24855
24856`model (MODEL-NAME)'
24857     Use this attribute on the M32R/D to set the addressability of an
24858     object.  The identifier MODEL-NAME is one of `small', `medium', or
24859     `large', representing each of the code models.
24860
24861     Small model objects live in the lower 16MB of memory (so that their
24862     addresses can be loaded with the `ld24' instruction).
24863
24864     Medium and large model objects may live anywhere in the 32-bit
24865     address space (the compiler generates `seth/add3' instructions to
24866     load their addresses).
24867
248686.36.4 MeP Variable Attributes
24869------------------------------
24870
24871The MeP target has a number of addressing modes and busses.  The `near'
24872space spans the standard memory space's first 16 megabytes (24 bits).
24873The `far' space spans the entire 32-bit memory space.  The `based'
24874space is a 128-byte region in the memory space that is addressed
24875relative to the `$tp' register.  The `tiny' space is a 65536-byte
24876region relative to the `$gp' register.  In addition to these memory
24877regions, the MeP target has a separate 16-bit control bus which is
24878specified with `cb' attributes.
24879
24880`based'
24881     Any variable with the `based' attribute is assigned to the
24882     `.based' section, and is accessed with relative to the `$tp'
24883     register.
24884
24885`tiny'
24886     Likewise, the `tiny' attribute assigned variables to the `.tiny'
24887     section, relative to the `$gp' register.
24888
24889`near'
24890     Variables with the `near' attribute are assumed to have addresses
24891     that fit in a 24-bit addressing mode.  This is the default for
24892     large variables (`-mtiny=4' is the default) but this attribute can
24893     override `-mtiny=' for small variables, or override `-ml'.
24894
24895`far'
24896     Variables with the `far' attribute are addressed using a full
24897     32-bit address.  Since this covers the entire memory space, this
24898     allows modules to make no assumptions about where variables might
24899     be stored.
24900
24901`io'
24902`io (ADDR)'
24903     Variables with the `io' attribute are used to address
24904     memory-mapped peripherals.  If an address is specified, the
24905     variable is assigned that address, else it is not assigned an
24906     address (it is assumed some other module assigns an address).
24907     Example:
24908
24909          int timer_count __attribute__((io(0x123)));
24910
24911`cb'
24912`cb (ADDR)'
24913     Variables with the `cb' attribute are used to access the control
24914     bus, using special instructions.  `addr' indicates the control bus
24915     address.  Example:
24916
24917          int cpu_clock __attribute__((cb(0x123)));
24918
24919
249206.36.5 i386 Variable Attributes
24921-------------------------------
24922
24923Two attributes are currently defined for i386 configurations:
24924`ms_struct' and `gcc_struct'
24925
24926`ms_struct'
24927`gcc_struct'
24928     If `packed' is used on a structure, or if bit-fields are used, it
24929     may be that the Microsoft ABI lays out the structure differently
24930     than the way GCC normally does.  Particularly when moving packed
24931     data between functions compiled with GCC and the native Microsoft
24932     compiler (either via function call or as data in a file), it may
24933     be necessary to access either format.
24934
24935     Currently `-m[no-]ms-bitfields' is provided for the Microsoft
24936     Windows X86 compilers to match the native Microsoft compiler.
24937
24938     The Microsoft structure layout algorithm is fairly simple with the
24939     exception of the bit-field packing.  The padding and alignment of
24940     members of structures and whether a bit-field can straddle a
24941     storage-unit boundary are determine by these rules:
24942
24943       1. Structure members are stored sequentially in the order in
24944          which they are declared: the first member has the lowest
24945          memory address and the last member the highest.
24946
24947       2. Every data object has an alignment requirement.  The
24948          alignment requirement for all data except structures, unions,
24949          and arrays is either the size of the object or the current
24950          packing size (specified with either the `aligned' attribute
24951          or the `pack' pragma), whichever is less.  For structures,
24952          unions, and arrays, the alignment requirement is the largest
24953          alignment requirement of its members.  Every object is
24954          allocated an offset so that:
24955
24956               offset % alignment_requirement == 0
24957
24958       3. Adjacent bit-fields are packed into the same 1-, 2-, or
24959          4-byte allocation unit if the integral types are the same
24960          size and if the next bit-field fits into the current
24961          allocation unit without crossing the boundary imposed by the
24962          common alignment requirements of the bit-fields.
24963
24964     MSVC interprets zero-length bit-fields in the following ways:
24965
24966       1. If a zero-length bit-field is inserted between two bit-fields
24967          that are normally coalesced, the bit-fields are not coalesced.
24968
24969          For example:
24970
24971               struct
24972                {
24973                  unsigned long bf_1 : 12;
24974                  unsigned long : 0;
24975                  unsigned long bf_2 : 12;
24976                } t1;
24977
24978          The size of `t1' is 8 bytes with the zero-length bit-field.
24979          If the zero-length bit-field were removed, `t1''s size would
24980          be 4 bytes.
24981
24982       2. If a zero-length bit-field is inserted after a bit-field,
24983          `foo', and the alignment of the zero-length bit-field is
24984          greater than the member that follows it, `bar', `bar' is
24985          aligned as the type of the zero-length bit-field.
24986
24987          For example:
24988
24989               struct
24990                {
24991                  char foo : 4;
24992                  short : 0;
24993                  char bar;
24994                } t2;
24995
24996               struct
24997                {
24998                  char foo : 4;
24999                  short : 0;
25000                  double bar;
25001                } t3;
25002
25003          For `t2', `bar' is placed at offset 2, rather than offset 1.
25004          Accordingly, the size of `t2' is 4.  For `t3', the zero-length
25005          bit-field does not affect the alignment of `bar' or, as a
25006          result, the size of the structure.
25007
25008          Taking this into account, it is important to note the
25009          following:
25010
25011            1. If a zero-length bit-field follows a normal bit-field,
25012               the type of the zero-length bit-field may affect the
25013               alignment of the structure as whole. For example, `t2'
25014               has a size of 4 bytes, since the zero-length bit-field
25015               follows a normal bit-field, and is of type short.
25016
25017            2. Even if a zero-length bit-field is not followed by a
25018               normal bit-field, it may still affect the alignment of
25019               the structure:
25020
25021                    struct
25022                     {
25023                       char foo : 6;
25024                       long : 0;
25025                     } t4;
25026
25027               Here, `t4' takes up 4 bytes.
25028
25029       3. Zero-length bit-fields following non-bit-field members are
25030          ignored:
25031
25032               struct
25033                {
25034                  char foo;
25035                  long : 0;
25036                  char bar;
25037                } t5;
25038
25039          Here, `t5' takes up 2 bytes.
25040
250416.36.6 PowerPC Variable Attributes
25042----------------------------------
25043
25044Three attributes currently are defined for PowerPC configurations:
25045`altivec', `ms_struct' and `gcc_struct'.
25046
25047 For full documentation of the struct attributes please see the
25048documentation in *note i386 Variable Attributes::.
25049
25050 For documentation of `altivec' attribute please see the documentation
25051in *note PowerPC Type Attributes::.
25052
250536.36.7 SPU Variable Attributes
25054------------------------------
25055
25056The SPU supports the `spu_vector' attribute for variables.  For
25057documentation of this attribute please see the documentation in *note
25058SPU Type Attributes::.
25059
250606.36.8 Xstormy16 Variable Attributes
25061------------------------------------
25062
25063One attribute is currently defined for xstormy16 configurations:
25064`below100'.
25065
25066`below100'
25067     If a variable has the `below100' attribute (`BELOW100' is allowed
25068     also), GCC places the variable in the first 0x100 bytes of memory
25069     and use special opcodes to access it.  Such variables are placed
25070     in either the `.bss_below100' section or the `.data_below100'
25071     section.
25072
25073
25074
25075File: gcc.info,  Node: Type Attributes,  Next: Alignment,  Prev: Variable Attributes,  Up: C Extensions
25076
250776.37 Specifying Attributes of Types
25078===================================
25079
25080The keyword `__attribute__' allows you to specify special attributes of
25081`struct' and `union' types when you define such types.  This keyword is
25082followed by an attribute specification inside double parentheses.
25083Seven attributes are currently defined for types: `aligned', `packed',
25084`transparent_union', `unused', `deprecated', `visibility', and
25085`may_alias'.  Other attributes are defined for functions (*note
25086Function Attributes::) and for variables (*note Variable Attributes::).
25087
25088 You may also specify any one of these attributes with `__' preceding
25089and following its keyword.  This allows you to use these attributes in
25090header files without being concerned about a possible macro of the same
25091name.  For example, you may use `__aligned__' instead of `aligned'.
25092
25093 You may specify type attributes in an enum, struct or union type
25094declaration or definition, or for other types in a `typedef'
25095declaration.
25096
25097 For an enum, struct or union type, you may specify attributes either
25098between the enum, struct or union tag and the name of the type, or just
25099past the closing curly brace of the _definition_.  The former syntax is
25100preferred.
25101
25102 *Note Attribute Syntax::, for details of the exact syntax for using
25103attributes.
25104
25105`aligned (ALIGNMENT)'
25106     This attribute specifies a minimum alignment (in bytes) for
25107     variables of the specified type.  For example, the declarations:
25108
25109          struct S { short f[3]; } __attribute__ ((aligned (8)));
25110          typedef int more_aligned_int __attribute__ ((aligned (8)));
25111
25112     force the compiler to ensure (as far as it can) that each variable
25113     whose type is `struct S' or `more_aligned_int' is allocated and
25114     aligned _at least_ on a 8-byte boundary.  On a SPARC, having all
25115     variables of type `struct S' aligned to 8-byte boundaries allows
25116     the compiler to use the `ldd' and `std' (doubleword load and
25117     store) instructions when copying one variable of type `struct S' to
25118     another, thus improving run-time efficiency.
25119
25120     Note that the alignment of any given `struct' or `union' type is
25121     required by the ISO C standard to be at least a perfect multiple of
25122     the lowest common multiple of the alignments of all of the members
25123     of the `struct' or `union' in question.  This means that you _can_
25124     effectively adjust the alignment of a `struct' or `union' type by
25125     attaching an `aligned' attribute to any one of the members of such
25126     a type, but the notation illustrated in the example above is a
25127     more obvious, intuitive, and readable way to request the compiler
25128     to adjust the alignment of an entire `struct' or `union' type.
25129
25130     As in the preceding example, you can explicitly specify the
25131     alignment (in bytes) that you wish the compiler to use for a given
25132     `struct' or `union' type.  Alternatively, you can leave out the
25133     alignment factor and just ask the compiler to align a type to the
25134     maximum useful alignment for the target machine you are compiling
25135     for.  For example, you could write:
25136
25137          struct S { short f[3]; } __attribute__ ((aligned));
25138
25139     Whenever you leave out the alignment factor in an `aligned'
25140     attribute specification, the compiler automatically sets the
25141     alignment for the type to the largest alignment that is ever used
25142     for any data type on the target machine you are compiling for.
25143     Doing this can often make copy operations more efficient, because
25144     the compiler can use whatever instructions copy the biggest chunks
25145     of memory when performing copies to or from the variables that
25146     have types that you have aligned this way.
25147
25148     In the example above, if the size of each `short' is 2 bytes, then
25149     the size of the entire `struct S' type is 6 bytes.  The smallest
25150     power of two that is greater than or equal to that is 8, so the
25151     compiler sets the alignment for the entire `struct S' type to 8
25152     bytes.
25153
25154     Note that although you can ask the compiler to select a
25155     time-efficient alignment for a given type and then declare only
25156     individual stand-alone objects of that type, the compiler's
25157     ability to select a time-efficient alignment is primarily useful
25158     only when you plan to create arrays of variables having the
25159     relevant (efficiently aligned) type.  If you declare or use arrays
25160     of variables of an efficiently-aligned type, then it is likely
25161     that your program also does pointer arithmetic (or subscripting,
25162     which amounts to the same thing) on pointers to the relevant type,
25163     and the code that the compiler generates for these pointer
25164     arithmetic operations is often more efficient for
25165     efficiently-aligned types than for other types.
25166
25167     The `aligned' attribute can only increase the alignment; but you
25168     can decrease it by specifying `packed' as well.  See below.
25169
25170     Note that the effectiveness of `aligned' attributes may be limited
25171     by inherent limitations in your linker.  On many systems, the
25172     linker is only able to arrange for variables to be aligned up to a
25173     certain maximum alignment.  (For some linkers, the maximum
25174     supported alignment may be very very small.)  If your linker is
25175     only able to align variables up to a maximum of 8-byte alignment,
25176     then specifying `aligned(16)' in an `__attribute__' still only
25177     provides you with 8-byte alignment.  See your linker documentation
25178     for further information.
25179
25180`packed'
25181     This attribute, attached to `struct' or `union' type definition,
25182     specifies that each member (other than zero-width bit-fields) of
25183     the structure or union is placed to minimize the memory required.
25184     When attached to an `enum' definition, it indicates that the
25185     smallest integral type should be used.
25186
25187     Specifying this attribute for `struct' and `union' types is
25188     equivalent to specifying the `packed' attribute on each of the
25189     structure or union members.  Specifying the `-fshort-enums' flag
25190     on the line is equivalent to specifying the `packed' attribute on
25191     all `enum' definitions.
25192
25193     In the following example `struct my_packed_struct''s members are
25194     packed closely together, but the internal layout of its `s' member
25195     is not packed--to do that, `struct my_unpacked_struct' needs to be
25196     packed too.
25197
25198          struct my_unpacked_struct
25199           {
25200              char c;
25201              int i;
25202           };
25203
25204          struct __attribute__ ((__packed__)) my_packed_struct
25205            {
25206               char c;
25207               int  i;
25208               struct my_unpacked_struct s;
25209            };
25210
25211     You may only specify this attribute on the definition of an `enum',
25212     `struct' or `union', not on a `typedef' that does not also define
25213     the enumerated type, structure or union.
25214
25215`transparent_union'
25216     This attribute, attached to a `union' type definition, indicates
25217     that any function parameter having that union type causes calls to
25218     that function to be treated in a special way.
25219
25220     First, the argument corresponding to a transparent union type can
25221     be of any type in the union; no cast is required.  Also, if the
25222     union contains a pointer type, the corresponding argument can be a
25223     null pointer constant or a void pointer expression; and if the
25224     union contains a void pointer type, the corresponding argument can
25225     be any pointer expression.  If the union member type is a pointer,
25226     qualifiers like `const' on the referenced type must be respected,
25227     just as with normal pointer conversions.
25228
25229     Second, the argument is passed to the function using the calling
25230     conventions of the first member of the transparent union, not the
25231     calling conventions of the union itself.  All members of the union
25232     must have the same machine representation; this is necessary for
25233     this argument passing to work properly.
25234
25235     Transparent unions are designed for library functions that have
25236     multiple interfaces for compatibility reasons.  For example,
25237     suppose the `wait' function must accept either a value of type
25238     `int *' to comply with POSIX, or a value of type `union wait *' to
25239     comply with the 4.1BSD interface.  If `wait''s parameter were
25240     `void *', `wait' would accept both kinds of arguments, but it
25241     would also accept any other pointer type and this would make
25242     argument type checking less useful.  Instead, `<sys/wait.h>' might
25243     define the interface as follows:
25244
25245          typedef union __attribute__ ((__transparent_union__))
25246            {
25247              int *__ip;
25248              union wait *__up;
25249            } wait_status_ptr_t;
25250
25251          pid_t wait (wait_status_ptr_t);
25252
25253     This interface allows either `int *' or `union wait *' arguments
25254     to be passed, using the `int *' calling convention.  The program
25255     can call `wait' with arguments of either type:
25256
25257          int w1 () { int w; return wait (&w); }
25258          int w2 () { union wait w; return wait (&w); }
25259
25260     With this interface, `wait''s implementation might look like this:
25261
25262          pid_t wait (wait_status_ptr_t p)
25263          {
25264            return waitpid (-1, p.__ip, 0);
25265          }
25266
25267`unused'
25268     When attached to a type (including a `union' or a `struct'), this
25269     attribute means that variables of that type are meant to appear
25270     possibly unused.  GCC does not produce a warning for any variables
25271     of that type, even if the variable appears to do nothing.  This is
25272     often the case with lock or thread classes, which are usually
25273     defined and then not referenced, but contain constructors and
25274     destructors that have nontrivial bookkeeping functions.
25275
25276`deprecated'
25277`deprecated (MSG)'
25278     The `deprecated' attribute results in a warning if the type is
25279     used anywhere in the source file.  This is useful when identifying
25280     types that are expected to be removed in a future version of a
25281     program.  If possible, the warning also includes the location of
25282     the declaration of the deprecated type, to enable users to easily
25283     find further information about why the type is deprecated, or what
25284     they should do instead.  Note that the warnings only occur for
25285     uses and then only if the type is being applied to an identifier
25286     that itself is not being declared as deprecated.
25287
25288          typedef int T1 __attribute__ ((deprecated));
25289          T1 x;
25290          typedef T1 T2;
25291          T2 y;
25292          typedef T1 T3 __attribute__ ((deprecated));
25293          T3 z __attribute__ ((deprecated));
25294
25295     results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
25296     warning is issued for line 4 because T2 is not explicitly
25297     deprecated.  Line 5 has no warning because T3 is explicitly
25298     deprecated.  Similarly for line 6.  The optional MSG argument,
25299     which must be a string, is printed in the warning if present.
25300
25301     The `deprecated' attribute can also be used for functions and
25302     variables (*note Function Attributes::, *note Variable
25303     Attributes::.)
25304
25305`may_alias'
25306     Accesses through pointers to types with this attribute are not
25307     subject to type-based alias analysis, but are instead assumed to
25308     be able to alias any other type of objects.  In the context of
25309     section 6.5 paragraph 7 of the C99 standard, an lvalue expression
25310     dereferencing such a pointer is treated like having a character
25311     type.  See `-fstrict-aliasing' for more information on aliasing
25312     issues.  This extension exists to support some vector APIs, in
25313     which pointers to one vector type are permitted to alias pointers
25314     to a different vector type.
25315
25316     Note that an object of a type with this attribute does not have any
25317     special semantics.
25318
25319     Example of use:
25320
25321          typedef short __attribute__((__may_alias__)) short_a;
25322
25323          int
25324          main (void)
25325          {
25326            int a = 0x12345678;
25327            short_a *b = (short_a *) &a;
25328
25329            b[1] = 0;
25330
25331            if (a == 0x12345678)
25332              abort();
25333
25334            exit(0);
25335          }
25336
25337     If you replaced `short_a' with `short' in the variable
25338     declaration, the above program would abort when compiled with
25339     `-fstrict-aliasing', which is on by default at `-O2' or above in
25340     recent GCC versions.
25341
25342`visibility'
25343     In C++, attribute visibility (*note Function Attributes::) can
25344     also be applied to class, struct, union and enum types.  Unlike
25345     other type attributes, the attribute must appear between the
25346     initial keyword and the name of the type; it cannot appear after
25347     the body of the type.
25348
25349     Note that the type visibility is applied to vague linkage entities
25350     associated with the class (vtable, typeinfo node, etc.).  In
25351     particular, if a class is thrown as an exception in one shared
25352     object and caught in another, the class must have default
25353     visibility.  Otherwise the two shared objects are unable to use
25354     the same typeinfo node and exception handling will break.
25355
25356
25357 To specify multiple attributes, separate them by commas within the
25358double parentheses: for example, `__attribute__ ((aligned (16),
25359packed))'.
25360
253616.37.1 ARM Type Attributes
25362--------------------------
25363
25364On those ARM targets that support `dllimport' (such as Symbian OS), you
25365can use the `notshared' attribute to indicate that the virtual table
25366and other similar data for a class should not be exported from a DLL.
25367For example:
25368
25369     class __declspec(notshared) C {
25370     public:
25371       __declspec(dllimport) C();
25372       virtual void f();
25373     }
25374
25375     __declspec(dllexport)
25376     C::C() {}
25377
25378In this code, `C::C' is exported from the current DLL, but the virtual
25379table for `C' is not exported.  (You can use `__attribute__' instead of
25380`__declspec' if you prefer, but most Symbian OS code uses `__declspec'.)
25381
253826.37.2 MeP Type Attributes
25383--------------------------
25384
25385Many of the MeP variable attributes may be applied to types as well.
25386Specifically, the `based', `tiny', `near', and `far' attributes may be
25387applied to either.  The `io' and `cb' attributes may not be applied to
25388types.
25389
253906.37.3 i386 Type Attributes
25391---------------------------
25392
25393Two attributes are currently defined for i386 configurations:
25394`ms_struct' and `gcc_struct'.
25395
25396`ms_struct'
25397`gcc_struct'
25398     If `packed' is used on a structure, or if bit-fields are used it
25399     may be that the Microsoft ABI packs them differently than GCC
25400     normally packs them.  Particularly when moving packed data between
25401     functions compiled with GCC and the native Microsoft compiler
25402     (either via function call or as data in a file), it may be
25403     necessary to access either format.
25404
25405     Currently `-m[no-]ms-bitfields' is provided for the Microsoft
25406     Windows X86 compilers to match the native Microsoft compiler.
25407
254086.37.4 PowerPC Type Attributes
25409------------------------------
25410
25411Three attributes currently are defined for PowerPC configurations:
25412`altivec', `ms_struct' and `gcc_struct'.
25413
25414 For full documentation of the `ms_struct' and `gcc_struct' attributes
25415please see the documentation in *note i386 Type Attributes::.
25416
25417 The `altivec' attribute allows one to declare AltiVec vector data
25418types supported by the AltiVec Programming Interface Manual.  The
25419attribute requires an argument to specify one of three vector types:
25420`vector__', `pixel__' (always followed by unsigned short), and `bool__'
25421(always followed by unsigned).
25422
25423     __attribute__((altivec(vector__)))
25424     __attribute__((altivec(pixel__))) unsigned short
25425     __attribute__((altivec(bool__))) unsigned
25426
25427 These attributes mainly are intended to support the `__vector',
25428`__pixel', and `__bool' AltiVec keywords.
25429
254306.37.5 SPU Type Attributes
25431--------------------------
25432
25433The SPU supports the `spu_vector' attribute for types.  This attribute
25434allows one to declare vector data types supported by the
25435Sony/Toshiba/IBM SPU Language Extensions Specification.  It is intended
25436to support the `__vector' keyword.
25437
25438
25439File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Type Attributes,  Up: C Extensions
25440
254416.38 Inquiring on Alignment of Types or Variables
25442=================================================
25443
25444The keyword `__alignof__' allows you to inquire about how an object is
25445aligned, or the minimum alignment usually required by a type.  Its
25446syntax is just like `sizeof'.
25447
25448 For example, if the target machine requires a `double' value to be
25449aligned on an 8-byte boundary, then `__alignof__ (double)' is 8.  This
25450is true on many RISC machines.  On more traditional machine designs,
25451`__alignof__ (double)' is 4 or even 2.
25452
25453 Some machines never actually require alignment; they allow reference
25454to any data type even at an odd address.  For these machines,
25455`__alignof__' reports the smallest alignment that GCC gives the data
25456type, usually as mandated by the target ABI.
25457
25458 If the operand of `__alignof__' is an lvalue rather than a type, its
25459value is the required alignment for its type, taking into account any
25460minimum alignment specified with GCC's `__attribute__' extension (*note
25461Variable Attributes::).  For example, after this declaration:
25462
25463     struct foo { int x; char y; } foo1;
25464
25465the value of `__alignof__ (foo1.y)' is 1, even though its actual
25466alignment is probably 2 or 4, the same as `__alignof__ (int)'.
25467
25468 It is an error to ask for the alignment of an incomplete type.
25469
25470
25471File: gcc.info,  Node: Inline,  Next: Volatiles,  Prev: Alignment,  Up: C Extensions
25472
254736.39 An Inline Function is As Fast As a Macro
25474=============================================
25475
25476By declaring a function inline, you can direct GCC to make calls to
25477that function faster.  One way GCC can achieve this is to integrate
25478that function's code into the code for its callers.  This makes
25479execution faster by eliminating the function-call overhead; in
25480addition, if any of the actual argument values are constant, their
25481known values may permit simplifications at compile time so that not all
25482of the inline function's code needs to be included.  The effect on code
25483size is less predictable; object code may be larger or smaller with
25484function inlining, depending on the particular case.  You can also
25485direct GCC to try to integrate all "simple enough" functions into their
25486callers with the option `-finline-functions'.
25487
25488 GCC implements three different semantics of declaring a function
25489inline.  One is available with `-std=gnu89' or `-fgnu89-inline' or when
25490`gnu_inline' attribute is present on all inline declarations, another
25491when `-std=c99', `-std=c11', `-std=gnu99' or `-std=gnu11' (without
25492`-fgnu89-inline'), and the third is used when compiling C++.
25493
25494 To declare a function inline, use the `inline' keyword in its
25495declaration, like this:
25496
25497     static inline int
25498     inc (int *a)
25499     {
25500       return (*a)++;
25501     }
25502
25503 If you are writing a header file to be included in ISO C90 programs,
25504write `__inline__' instead of `inline'.  *Note Alternate Keywords::.
25505
25506 The three types of inlining behave similarly in two important cases:
25507when the `inline' keyword is used on a `static' function, like the
25508example above, and when a function is first declared without using the
25509`inline' keyword and then is defined with `inline', like this:
25510
25511     extern int inc (int *a);
25512     inline int
25513     inc (int *a)
25514     {
25515       return (*a)++;
25516     }
25517
25518 In both of these common cases, the program behaves the same as if you
25519had not used the `inline' keyword, except for its speed.
25520
25521 When a function is both inline and `static', if all calls to the
25522function are integrated into the caller, and the function's address is
25523never used, then the function's own assembler code is never referenced.
25524In this case, GCC does not actually output assembler code for the
25525function, unless you specify the option `-fkeep-inline-functions'.
25526Some calls cannot be integrated for various reasons (in particular,
25527calls that precede the function's definition cannot be integrated, and
25528neither can recursive calls within the definition).  If there is a
25529nonintegrated call, then the function is compiled to assembler code as
25530usual.  The function must also be compiled as usual if the program
25531refers to its address, because that can't be inlined.
25532
25533 Note that certain usages in a function definition can make it
25534unsuitable for inline substitution.  Among these usages are: variadic
25535functions, use of `alloca', use of variable-length data types (*note
25536Variable Length::), use of computed goto (*note Labels as Values::),
25537use of nonlocal goto, and nested functions (*note Nested Functions::).
25538Using `-Winline' warns when a function marked `inline' could not be
25539substituted, and gives the reason for the failure.
25540
25541 As required by ISO C++, GCC considers member functions defined within
25542the body of a class to be marked inline even if they are not explicitly
25543declared with the `inline' keyword.  You can override this with
25544`-fno-default-inline'; *note Options Controlling C++ Dialect: C++
25545Dialect Options.
25546
25547 GCC does not inline any functions when not optimizing unless you
25548specify the `always_inline' attribute for the function, like this:
25549
25550     /* Prototype.  */
25551     inline void foo (const char) __attribute__((always_inline));
25552
25553 The remainder of this section is specific to GNU C90 inlining.
25554
25555 When an inline function is not `static', then the compiler must assume
25556that there may be calls from other source files; since a global symbol
25557can be defined only once in any program, the function must not be
25558defined in the other source files, so the calls therein cannot be
25559integrated.  Therefore, a non-`static' inline function is always
25560compiled on its own in the usual fashion.
25561
25562 If you specify both `inline' and `extern' in the function definition,
25563then the definition is used only for inlining.  In no case is the
25564function compiled on its own, not even if you refer to its address
25565explicitly.  Such an address becomes an external reference, as if you
25566had only declared the function, and had not defined it.
25567
25568 This combination of `inline' and `extern' has almost the effect of a
25569macro.  The way to use it is to put a function definition in a header
25570file with these keywords, and put another copy of the definition
25571(lacking `inline' and `extern') in a library file.  The definition in
25572the header file causes most calls to the function to be inlined.  If
25573any uses of the function remain, they refer to the single copy in the
25574library.
25575
25576
25577File: gcc.info,  Node: Volatiles,  Next: Extended Asm,  Prev: Inline,  Up: C Extensions
25578
255796.40 When is a Volatile Object Accessed?
25580========================================
25581
25582C has the concept of volatile objects.  These are normally accessed by
25583pointers and used for accessing hardware or inter-thread communication.
25584The standard encourages compilers to refrain from optimizations
25585concerning accesses to volatile objects, but leaves it implementation
25586defined as to what constitutes a volatile access.  The minimum
25587requirement is that at a sequence point all previous accesses to
25588volatile objects have stabilized and no subsequent accesses have
25589occurred.  Thus an implementation is free to reorder and combine
25590volatile accesses that occur between sequence points, but cannot do so
25591for accesses across a sequence point.  The use of volatile does not
25592allow you to violate the restriction on updating objects multiple times
25593between two sequence points.
25594
25595 Accesses to non-volatile objects are not ordered with respect to
25596volatile accesses.  You cannot use a volatile object as a memory
25597barrier to order a sequence of writes to non-volatile memory.  For
25598instance:
25599
25600     int *ptr = SOMETHING;
25601     volatile int vobj;
25602     *ptr = SOMETHING;
25603     vobj = 1;
25604
25605Unless *PTR and VOBJ can be aliased, it is not guaranteed that the
25606write to *PTR occurs by the time the update of VOBJ happens.  If you
25607need this guarantee, you must use a stronger memory barrier such as:
25608
25609     int *ptr = SOMETHING;
25610     volatile int vobj;
25611     *ptr = SOMETHING;
25612     asm volatile ("" : : : "memory");
25613     vobj = 1;
25614
25615 A scalar volatile object is read when it is accessed in a void context:
25616
25617     volatile int *src = SOMEVALUE;
25618     *src;
25619
25620 Such expressions are rvalues, and GCC implements this as a read of the
25621volatile object being pointed to.
25622
25623 Assignments are also expressions and have an rvalue.  However when
25624assigning to a scalar volatile, the volatile object is not reread,
25625regardless of whether the assignment expression's rvalue is used or
25626not.  If the assignment's rvalue is used, the value is that assigned to
25627the volatile object.  For instance, there is no read of VOBJ in all the
25628following cases:
25629
25630     int obj;
25631     volatile int vobj;
25632     vobj = SOMETHING;
25633     obj = vobj = SOMETHING;
25634     obj ? vobj = ONETHING : vobj = ANOTHERTHING;
25635     obj = (SOMETHING, vobj = ANOTHERTHING);
25636
25637 If you need to read the volatile object after an assignment has
25638occurred, you must use a separate expression with an intervening
25639sequence point.
25640
25641 As bit-fields are not individually addressable, volatile bit-fields may
25642be implicitly read when written to, or when adjacent bit-fields are
25643accessed.  Bit-field operations may be optimized such that adjacent
25644bit-fields are only partially accessed, if they straddle a storage unit
25645boundary.  For these reasons it is unwise to use volatile bit-fields to
25646access hardware.
25647
25648
25649File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Volatiles,  Up: C Extensions
25650
256516.41 Assembler Instructions with C Expression Operands
25652======================================================
25653
25654In an assembler instruction using `asm', you can specify the operands
25655of the instruction using C expressions.  This means you need not guess
25656which registers or memory locations contain the data you want to use.
25657
25658 You must specify an assembler instruction template much like what
25659appears in a machine description, plus an operand constraint string for
25660each operand.
25661
25662 For example, here is how to use the 68881's `fsinx' instruction:
25663
25664     asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
25665
25666Here `angle' is the C expression for the input operand while `result'
25667is that of the output operand.  Each has `"f"' as its operand
25668constraint, saying that a floating-point register is required.  The `='
25669in `=f' indicates that the operand is an output; all output operands'
25670constraints must use `='.  The constraints use the same language used
25671in the machine description (*note Constraints::).
25672
25673 Each operand is described by an operand-constraint string followed by
25674the C expression in parentheses.  A colon separates the assembler
25675template from the first output operand and another separates the last
25676output operand from the first input, if any.  Commas separate the
25677operands within each group.  The total number of operands is currently
25678limited to 30; this limitation may be lifted in some future version of
25679GCC.
25680
25681 If there are no output operands but there are input operands, you must
25682place two consecutive colons surrounding the place where the output
25683operands would go.
25684
25685 As of GCC version 3.1, it is also possible to specify input and output
25686operands using symbolic names which can be referenced within the
25687assembler code.  These names are specified inside square brackets
25688preceding the constraint string, and can be referenced inside the
25689assembler code using `%[NAME]' instead of a percentage sign followed by
25690the operand number.  Using named operands the above example could look
25691like:
25692
25693     asm ("fsinx %[angle],%[output]"
25694          : [output] "=f" (result)
25695          : [angle] "f" (angle));
25696
25697Note that the symbolic operand names have no relation whatsoever to
25698other C identifiers.  You may use any name you like, even those of
25699existing C symbols, but you must ensure that no two operands within the
25700same assembler construct use the same symbolic name.
25701
25702 Output operand expressions must be lvalues; the compiler can check
25703this.  The input operands need not be lvalues.  The compiler cannot
25704check whether the operands have data types that are reasonable for the
25705instruction being executed.  It does not parse the assembler instruction
25706template and does not know what it means or even whether it is valid
25707assembler input.  The extended `asm' feature is most often used for
25708machine instructions the compiler itself does not know exist.  If the
25709output expression cannot be directly addressed (for example, it is a
25710bit-field), your constraint must allow a register.  In that case, GCC
25711uses the register as the output of the `asm', and then stores that
25712register into the output.
25713
25714 The ordinary output operands must be write-only; GCC assumes that the
25715values in these operands before the instruction are dead and need not
25716be generated.  Extended asm supports input-output or read-write
25717operands.  Use the constraint character `+' to indicate such an operand
25718and list it with the output operands.
25719
25720 You may, as an alternative, logically split its function into two
25721separate operands, one input operand and one write-only output operand.
25722The connection between them is expressed by constraints that say they
25723need to be in the same location when the instruction executes.  You can
25724use the same C expression for both operands, or different expressions.
25725For example, here we write the (fictitious) `combine' instruction with
25726`bar' as its read-only source operand and `foo' as its read-write
25727destination:
25728
25729     asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
25730
25731The constraint `"0"' for operand 1 says that it must occupy the same
25732location as operand 0.  A number in constraint is allowed only in an
25733input operand and it must refer to an output operand.
25734
25735 Only a number in the constraint can guarantee that one operand is in
25736the same place as another.  The mere fact that `foo' is the value of
25737both operands is not enough to guarantee that they are in the same
25738place in the generated assembler code.  The following does not work
25739reliably:
25740
25741     asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
25742
25743 Various optimizations or reloading could cause operands 0 and 1 to be
25744in different registers; GCC knows no reason not to do so.  For example,
25745the compiler might find a copy of the value of `foo' in one register and
25746use it for operand 1, but generate the output operand 0 in a different
25747register (copying it afterward to `foo''s own address).  Of course,
25748since the register for operand 1 is not even mentioned in the assembler
25749code, the result will not work, but GCC can't tell that.
25750
25751 As of GCC version 3.1, one may write `[NAME]' instead of the operand
25752number for a matching constraint.  For example:
25753
25754     asm ("cmoveq %1,%2,%[result]"
25755          : [result] "=r"(result)
25756          : "r" (test), "r"(new), "[result]"(old));
25757
25758 Sometimes you need to make an `asm' operand be a specific register,
25759but there's no matching constraint letter for that register _by
25760itself_.  To force the operand into that register, use a local variable
25761for the operand and specify the register in the variable declaration.
25762*Note Explicit Reg Vars::.  Then for the `asm' operand, use any
25763register constraint letter that matches the register:
25764
25765     register int *p1 asm ("r0") = ...;
25766     register int *p2 asm ("r1") = ...;
25767     register int *result asm ("r0");
25768     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
25769
25770 In the above example, beware that a register that is call-clobbered by
25771the target ABI will be overwritten by any function call in the
25772assignment, including library calls for arithmetic operators.  Also a
25773register may be clobbered when generating some operations, like
25774variable shift, memory copy or memory move on x86.  Assuming it is a
25775call-clobbered register, this may happen to `r0' above by the
25776assignment to `p2'.  If you have to use such a register, use temporary
25777variables for expressions between the register assignment and use:
25778
25779     int t1 = ...;
25780     register int *p1 asm ("r0") = ...;
25781     register int *p2 asm ("r1") = t1;
25782     register int *result asm ("r0");
25783     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
25784
25785 Some instructions clobber specific hard registers.  To describe this,
25786write a third colon after the input operands, followed by the names of
25787the clobbered hard registers (given as strings).  Here is a realistic
25788example for the VAX:
25789
25790     asm volatile ("movc3 %0,%1,%2"
25791                   : /* no outputs */
25792                   : "g" (from), "g" (to), "g" (count)
25793                   : "r0", "r1", "r2", "r3", "r4", "r5");
25794
25795 You may not write a clobber description in a way that overlaps with an
25796input or output operand.  For example, you may not have an operand
25797describing a register class with one member if you mention that register
25798in the clobber list.  Variables declared to live in specific registers
25799(*note Explicit Reg Vars::), and used as asm input or output operands
25800must have no part mentioned in the clobber description.  There is no
25801way for you to specify that an input operand is modified without also
25802specifying it as an output operand.  Note that if all the output
25803operands you specify are for this purpose (and hence unused), you then
25804also need to specify `volatile' for the `asm' construct, as described
25805below, to prevent GCC from deleting the `asm' statement as unused.
25806
25807 If you refer to a particular hardware register from the assembler code,
25808you probably have to list the register after the third colon to tell
25809the compiler the register's value is modified.  In some assemblers, the
25810register names begin with `%'; to produce one `%' in the assembler
25811code, you must write `%%' in the input.
25812
25813 If your assembler instruction can alter the condition code register,
25814add `cc' to the list of clobbered registers.  GCC on some machines
25815represents the condition codes as a specific hardware register; `cc'
25816serves to name this register.  On other machines, the condition code is
25817handled differently, and specifying `cc' has no effect.  But it is
25818valid no matter what the machine.
25819
25820 If your assembler instructions access memory in an unpredictable
25821fashion, add `memory' to the list of clobbered registers.  This causes
25822GCC to not keep memory values cached in registers across the assembler
25823instruction and not optimize stores or loads to that memory.  You also
25824should add the `volatile' keyword if the memory affected is not listed
25825in the inputs or outputs of the `asm', as the `memory' clobber does not
25826count as a side-effect of the `asm'.  If you know how large the
25827accessed memory is, you can add it as input or output but if this is
25828not known, you should add `memory'.  As an example, if you access ten
25829bytes of a string, you can use a memory input like:
25830
25831     {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}.
25832
25833 Note that in the following example the memory input is necessary,
25834otherwise GCC might optimize the store to `x' away:
25835     int foo ()
25836     {
25837       int x = 42;
25838       int *y = &x;
25839       int result;
25840       asm ("magic stuff accessing an 'int' pointed to by '%1'"
25841            : "=&d" (r) : "a" (y), "m" (*y));
25842       return result;
25843     }
25844
25845 You can put multiple assembler instructions together in a single `asm'
25846template, separated by the characters normally used in assembly code
25847for the system.  A combination that works in most places is a newline
25848to break the line, plus a tab character to move to the instruction field
25849(written as `\n\t').  Sometimes semicolons can be used, if the
25850assembler allows semicolons as a line-breaking character.  Note that
25851some assembler dialects use semicolons to start a comment.  The input
25852operands are guaranteed not to use any of the clobbered registers, and
25853neither do the output operands' addresses, so you can read and write
25854the clobbered registers as many times as you like.  Here is an example
25855of multiple instructions in a template; it assumes the subroutine
25856`_foo' accepts arguments in registers 9 and 10:
25857
25858     asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo"
25859          : /* no outputs */
25860          : "g" (from), "g" (to)
25861          : "r9", "r10");
25862
25863 Unless an output operand has the `&' constraint modifier, GCC may
25864allocate it in the same register as an unrelated input operand, on the
25865assumption the inputs are consumed before the outputs are produced.
25866This assumption may be false if the assembler code actually consists of
25867more than one instruction.  In such a case, use `&' for each output
25868operand that may not overlap an input.  *Note Modifiers::.
25869
25870 If you want to test the condition code produced by an assembler
25871instruction, you must include a branch and a label in the `asm'
25872construct, as follows:
25873
25874     asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:"
25875          : "g" (result)
25876          : "g" (input));
25877
25878This assumes your assembler supports local labels, as the GNU assembler
25879and most Unix assemblers do.
25880
25881 Speaking of labels, jumps from one `asm' to another are not supported.
25882The compiler's optimizers do not know about these jumps, and therefore
25883they cannot take account of them when deciding how to optimize.  *Note
25884Extended asm with goto::.
25885
25886 Usually the most convenient way to use these `asm' instructions is to
25887encapsulate them in macros that look like functions.  For example,
25888
25889     #define sin(x)       \
25890     ({ double __value, __arg = (x);   \
25891        asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
25892        __value; })
25893
25894Here the variable `__arg' is used to make sure that the instruction
25895operates on a proper `double' value, and to accept only those arguments
25896`x' that can convert automatically to a `double'.
25897
25898 Another way to make sure the instruction operates on the correct data
25899type is to use a cast in the `asm'.  This is different from using a
25900variable `__arg' in that it converts more different types.  For
25901example, if the desired type is `int', casting the argument to `int'
25902accepts a pointer with no complaint, while assigning the argument to an
25903`int' variable named `__arg' warns about using a pointer unless the
25904caller explicitly casts it.
25905
25906 If an `asm' has output operands, GCC assumes for optimization purposes
25907the instruction has no side effects except to change the output
25908operands.  This does not mean instructions with a side effect cannot be
25909used, but you must be careful, because the compiler may eliminate them
25910if the output operands aren't used, or move them out of loops, or
25911replace two with one if they constitute a common subexpression.  Also,
25912if your instruction does have a side effect on a variable that otherwise
25913appears not to change, the old value of the variable may be reused later
25914if it happens to be found in a register.
25915
25916 You can prevent an `asm' instruction from being deleted by writing the
25917keyword `volatile' after the `asm'.  For example:
25918
25919     #define get_and_set_priority(new)              \
25920     ({ int __old;                                  \
25921        asm volatile ("get_and_set_priority %0, %1" \
25922                      : "=g" (__old) : "g" (new));  \
25923        __old; })
25924
25925The `volatile' keyword indicates that the instruction has important
25926side-effects.  GCC does not delete a volatile `asm' if it is reachable.
25927(The instruction can still be deleted if GCC can prove that control
25928flow never reaches the location of the instruction.)  Note that even a
25929volatile `asm' instruction can be moved relative to other code,
25930including across jump instructions.  For example, on many targets there
25931is a system register that can be set to control the rounding mode of
25932floating-point operations.  You might try setting it with a volatile
25933`asm', like this PowerPC example:
25934
25935            asm volatile("mtfsf 255,%0" : : "f" (fpenv));
25936            sum = x + y;
25937
25938This does not work reliably, as the compiler may move the addition back
25939before the volatile `asm'.  To make it work you need to add an
25940artificial dependency to the `asm' referencing a variable in the code
25941you don't want moved, for example:
25942
25943         asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv));
25944         sum = x + y;
25945
25946 Similarly, you can't expect a sequence of volatile `asm' instructions
25947to remain perfectly consecutive.  If you want consecutive output, use a
25948single `asm'.  Also, GCC performs some optimizations across a volatile
25949`asm' instruction; GCC does not "forget everything" when it encounters
25950a volatile `asm' instruction the way some other compilers do.
25951
25952 An `asm' instruction without any output operands is treated
25953identically to a volatile `asm' instruction.
25954
25955 It is a natural idea to look for a way to give access to the condition
25956code left by the assembler instruction.  However, when we attempted to
25957implement this, we found no way to make it work reliably.  The problem
25958is that output operands might need reloading, which result in
25959additional following "store" instructions.  On most machines, these
25960instructions alter the condition code before there is time to test it.
25961This problem doesn't arise for ordinary "test" and "compare"
25962instructions because they don't have any output operands.
25963
25964 For reasons similar to those described above, it is not possible to
25965give an assembler instruction access to the condition code left by
25966previous instructions.
25967
25968 As of GCC version 4.5, `asm goto' may be used to have the assembly
25969jump to one or more C labels.  In this form, a fifth section after the
25970clobber list contains a list of all C labels to which the assembly may
25971jump.  Each label operand is implicitly self-named.  The `asm' is also
25972assumed to fall through to the next statement.
25973
25974 This form of `asm' is restricted to not have outputs.  This is due to
25975a internal restriction in the compiler that control transfer
25976instructions cannot have outputs.  This restriction on `asm goto' may
25977be lifted in some future version of the compiler.  In the meantime,
25978`asm goto' may include a memory clobber, and so leave outputs in memory.
25979
25980     int frob(int x)
25981     {
25982       int y;
25983       asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
25984                 : : "r"(x), "r"(&y) : "r5", "memory" : error);
25985       return y;
25986      error:
25987       return -1;
25988     }
25989
25990In this (inefficient) example, the `frob' instruction sets the carry
25991bit to indicate an error.  The `jc' instruction detects this and
25992branches to the `error' label.  Finally, the output of the `frob'
25993instruction (`%r5') is stored into the memory for variable `y', which
25994is later read by the `return' statement.
25995
25996     void doit(void)
25997     {
25998       int i = 0;
25999       asm goto ("mfsr %%r1, 123; jmp %%r1;"
26000                 ".pushsection doit_table;"
26001                 ".long %l0, %l1, %l2, %l3;"
26002                 ".popsection"
26003                 : : : "r1" : label1, label2, label3, label4);
26004       __builtin_unreachable ();
26005
26006      label1:
26007       f1();
26008       return;
26009      label2:
26010       f2();
26011       return;
26012      label3:
26013       i = 1;
26014      label4:
26015       f3(i);
26016     }
26017
26018In this (also inefficient) example, the `mfsr' instruction reads an
26019address from some out-of-band machine register, and the following `jmp'
26020instruction branches to that address.  The address read by the `mfsr'
26021instruction is assumed to have been previously set via some
26022application-specific mechanism to be one of the four values stored in
26023the `doit_table' section.  Finally, the `asm' is followed by a call to
26024`__builtin_unreachable' to indicate that the `asm' does not in fact
26025fall through.
26026
26027     #define TRACE1(NUM)                         \
26028       do {                                      \
26029         asm goto ("0: nop;"                     \
26030                   ".pushsection trace_table;"   \
26031                   ".long 0b, %l0;"              \
26032                   ".popsection"                 \
26033                   : : : : trace#NUM);           \
26034         if (0) { trace#NUM: trace(); }          \
26035       } while (0)
26036     #define TRACE  TRACE1(__COUNTER__)
26037
26038In this example (which in fact inspired the `asm goto' feature) we want
26039on rare occasions to call the `trace' function; on other occasions we'd
26040like to keep the overhead to the absolute minimum.  The normal code
26041path consists of a single `nop' instruction.  However, we record the
26042address of this `nop' together with the address of a label that calls
26043the `trace' function.  This allows the `nop' instruction to be patched
26044at run time to be an unconditional branch to the stored label.  It is
26045assumed that an optimizing compiler moves the labeled block out of
26046line, to optimize the fall through path from the `asm'.
26047
26048 If you are writing a header file that should be includable in ISO C
26049programs, write `__asm__' instead of `asm'.  *Note Alternate Keywords::.
26050
260516.41.1 Size of an `asm'
26052-----------------------
26053
26054Some targets require that GCC track the size of each instruction used in
26055order to generate correct code.  Because the final length of an `asm'
26056is only known by the assembler, GCC must make an estimate as to how big
26057it will be.  The estimate is formed by counting the number of
26058statements in the pattern of the `asm' and multiplying that by the
26059length of the longest instruction on that processor.  Statements in the
26060`asm' are identified by newline characters and whatever statement
26061separator characters are supported by the assembler; on most processors
26062this is the `;' character.
26063
26064 Normally, GCC's estimate is perfectly adequate to ensure that correct
26065code is generated, but it is possible to confuse the compiler if you use
26066pseudo instructions or assembler macros that expand into multiple real
26067instructions or if you use assembler directives that expand to more
26068space in the object file than is needed for a single instruction.  If
26069this happens then the assembler produces a diagnostic saying that a
26070label is unreachable.
26071
260726.41.2 i386 floating-point asm operands
26073---------------------------------------
26074
26075On i386 targets, there are several rules on the usage of stack-like
26076registers in the operands of an `asm'.  These rules apply only to the
26077operands that are stack-like registers:
26078
26079  1. Given a set of input registers that die in an `asm', it is
26080     necessary to know which are implicitly popped by the `asm', and
26081     which must be explicitly popped by GCC.
26082
26083     An input register that is implicitly popped by the `asm' must be
26084     explicitly clobbered, unless it is constrained to match an output
26085     operand.
26086
26087  2. For any input register that is implicitly popped by an `asm', it is
26088     necessary to know how to adjust the stack to compensate for the
26089     pop.  If any non-popped input is closer to the top of the
26090     reg-stack than the implicitly popped register, it would not be
26091     possible to know what the stack looked like--it's not clear how
26092     the rest of the stack "slides up".
26093
26094     All implicitly popped input registers must be closer to the top of
26095     the reg-stack than any input that is not implicitly popped.
26096
26097     It is possible that if an input dies in an `asm', the compiler
26098     might use the input register for an output reload.  Consider this
26099     example:
26100
26101          asm ("foo" : "=t" (a) : "f" (b));
26102
26103     This code says that input `b' is not popped by the `asm', and that
26104     the `asm' pushes a result onto the reg-stack, i.e., the stack is
26105     one deeper after the `asm' than it was before.  But, it is
26106     possible that reload may think that it can use the same register
26107     for both the input and the output.
26108
26109     To prevent this from happening, if any input operand uses the `f'
26110     constraint, all output register constraints must use the `&'
26111     early-clobber modifier.
26112
26113     The example above would be correctly written as:
26114
26115          asm ("foo" : "=&t" (a) : "f" (b));
26116
26117  3. Some operands need to be in particular places on the stack.  All
26118     output operands fall in this category--GCC has no other way to
26119     know which registers the outputs appear in unless you indicate
26120     this in the constraints.
26121
26122     Output operands must specifically indicate which register an output
26123     appears in after an `asm'.  `=f' is not allowed: the operand
26124     constraints must select a class with a single register.
26125
26126  4. Output operands may not be "inserted" between existing stack
26127     registers.  Since no 387 opcode uses a read/write operand, all
26128     output operands are dead before the `asm', and are pushed by the
26129     `asm'.  It makes no sense to push anywhere but the top of the
26130     reg-stack.
26131
26132     Output operands must start at the top of the reg-stack: output
26133     operands may not "skip" a register.
26134
26135  5. Some `asm' statements may need extra stack space for internal
26136     calculations.  This can be guaranteed by clobbering stack registers
26137     unrelated to the inputs and outputs.
26138
26139
26140 Here are a couple of reasonable `asm's to want to write.  This `asm'
26141takes one input, which is internally popped, and produces two outputs.
26142
26143     asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
26144
26145This `asm' takes two inputs, which are popped by the `fyl2xp1' opcode,
26146and replaces them with one output.  The `st(1)' clobber is necessary
26147for the compiler to know that `fyl2xp1' pops both inputs.
26148
26149     asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
26150
26151
26152File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: C Extensions
26153
261546.42 Constraints for `asm' Operands
26155===================================
26156
26157Here are specific details on what constraint letters you can use with
26158`asm' operands.  Constraints can say whether an operand may be in a
26159register, and which kinds of register; whether the operand can be a
26160memory reference, and which kinds of address; whether the operand may
26161be an immediate constant, and which possible values it may have.
26162Constraints can also require two operands to match.  Side-effects
26163aren't allowed in operands of inline `asm', unless `<' or `>'
26164constraints are used, because there is no guarantee that the
26165side-effects will happen exactly once in an instruction that can update
26166the addressing register.
26167
26168* Menu:
26169
26170* Simple Constraints::  Basic use of constraints.
26171* Multi-Alternative::   When an insn has two alternative constraint-patterns.
26172* Modifiers::           More precise control over effects of constraints.
26173* Machine Constraints:: Special constraints for some particular machines.
26174
26175
26176File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
26177
261786.42.1 Simple Constraints
26179-------------------------
26180
26181The simplest kind of constraint is a string full of letters, each of
26182which describes one kind of operand that is permitted.  Here are the
26183letters that are allowed:
26184
26185whitespace
26186     Whitespace characters are ignored and can be inserted at any
26187     position except the first.  This enables each alternative for
26188     different operands to be visually aligned in the machine
26189     description even if they have different number of constraints and
26190     modifiers.
26191
26192`m'
26193     A memory operand is allowed, with any kind of address that the
26194     machine supports in general.  Note that the letter used for the
26195     general memory constraint can be re-defined by a back end using
26196     the `TARGET_MEM_CONSTRAINT' macro.
26197
26198`o'
26199     A memory operand is allowed, but only if the address is
26200     "offsettable".  This means that adding a small integer (actually,
26201     the width in bytes of the operand, as determined by its machine
26202     mode) may be added to the address and the result is also a valid
26203     memory address.
26204
26205     For example, an address which is constant is offsettable; so is an
26206     address that is the sum of a register and a constant (as long as a
26207     slightly larger constant is also within the range of
26208     address-offsets supported by the machine); but an autoincrement or
26209     autodecrement address is not offsettable.  More complicated
26210     indirect/indexed addresses may or may not be offsettable depending
26211     on the other addressing modes that the machine supports.
26212
26213     Note that in an output operand which can be matched by another
26214     operand, the constraint letter `o' is valid only when accompanied
26215     by both `<' (if the target machine has predecrement addressing)
26216     and `>' (if the target machine has preincrement addressing).
26217
26218`V'
26219     A memory operand that is not offsettable.  In other words,
26220     anything that would fit the `m' constraint but not the `o'
26221     constraint.
26222
26223`<'
26224     A memory operand with autodecrement addressing (either
26225     predecrement or postdecrement) is allowed.  In inline `asm' this
26226     constraint is only allowed if the operand is used exactly once in
26227     an instruction that can handle the side-effects.  Not using an
26228     operand with `<' in constraint string in the inline `asm' pattern
26229     at all or using it in multiple instructions isn't valid, because
26230     the side-effects wouldn't be performed or would be performed more
26231     than once.  Furthermore, on some targets the operand with `<' in
26232     constraint string must be accompanied by special instruction
26233     suffixes like `%U0' instruction suffix on PowerPC or `%P0' on
26234     IA-64.
26235
26236`>'
26237     A memory operand with autoincrement addressing (either
26238     preincrement or postincrement) is allowed.  In inline `asm' the
26239     same restrictions as for `<' apply.
26240
26241`r'
26242     A register operand is allowed provided that it is in a general
26243     register.
26244
26245`i'
26246     An immediate integer operand (one with constant value) is allowed.
26247     This includes symbolic constants whose values will be known only at
26248     assembly time or later.
26249
26250`n'
26251     An immediate integer operand with a known numeric value is allowed.
26252     Many systems cannot support assembly-time constants for operands
26253     less than a word wide.  Constraints for these operands should use
26254     `n' rather than `i'.
26255
26256`I', `J', `K', ... `P'
26257     Other letters in the range `I' through `P' may be defined in a
26258     machine-dependent fashion to permit immediate integer operands with
26259     explicit integer values in specified ranges.  For example, on the
26260     68000, `I' is defined to stand for the range of values 1 to 8.
26261     This is the range permitted as a shift count in the shift
26262     instructions.
26263
26264`E'
26265     An immediate floating operand (expression code `const_double') is
26266     allowed, but only if the target floating point format is the same
26267     as that of the host machine (on which the compiler is running).
26268
26269`F'
26270     An immediate floating operand (expression code `const_double' or
26271     `const_vector') is allowed.
26272
26273`G', `H'
26274     `G' and `H' may be defined in a machine-dependent fashion to
26275     permit immediate floating operands in particular ranges of values.
26276
26277`s'
26278     An immediate integer operand whose value is not an explicit
26279     integer is allowed.
26280
26281     This might appear strange; if an insn allows a constant operand
26282     with a value not known at compile time, it certainly must allow
26283     any known value.  So why use `s' instead of `i'?  Sometimes it
26284     allows better code to be generated.
26285
26286     For example, on the 68000 in a fullword instruction it is possible
26287     to use an immediate operand; but if the immediate value is between
26288     -128 and 127, better code results from loading the value into a
26289     register and using the register.  This is because the load into
26290     the register can be done with a `moveq' instruction.  We arrange
26291     for this to happen by defining the letter `K' to mean "any integer
26292     outside the range -128 to 127", and then specifying `Ks' in the
26293     operand constraints.
26294
26295`g'
26296     Any register, memory or immediate integer operand is allowed,
26297     except for registers that are not general registers.
26298
26299`X'
26300     Any operand whatsoever is allowed.
26301
26302`0', `1', `2', ... `9'
26303     An operand that matches the specified operand number is allowed.
26304     If a digit is used together with letters within the same
26305     alternative, the digit should come last.
26306
26307     This number is allowed to be more than a single digit.  If multiple
26308     digits are encountered consecutively, they are interpreted as a
26309     single decimal integer.  There is scant chance for ambiguity,
26310     since to-date it has never been desirable that `10' be interpreted
26311     as matching either operand 1 _or_ operand 0.  Should this be
26312     desired, one can use multiple alternatives instead.
26313
26314     This is called a "matching constraint" and what it really means is
26315     that the assembler has only a single operand that fills two roles
26316     which `asm' distinguishes.  For example, an add instruction uses
26317     two input operands and an output operand, but on most CISC
26318     machines an add instruction really has only two operands, one of
26319     them an input-output operand:
26320
26321          addl #35,r12
26322
26323     Matching constraints are used in these circumstances.  More
26324     precisely, the two operands that match must include one input-only
26325     operand and one output-only operand.  Moreover, the digit must be a
26326     smaller number than the number of the operand that uses it in the
26327     constraint.
26328
26329`p'
26330     An operand that is a valid memory address is allowed.  This is for
26331     "load address" and "push address" instructions.
26332
26333     `p' in the constraint must be accompanied by `address_operand' as
26334     the predicate in the `match_operand'.  This predicate interprets
26335     the mode specified in the `match_operand' as the mode of the memory
26336     reference for which the address would be valid.
26337
26338OTHER-LETTERS
26339     Other letters can be defined in machine-dependent fashion to stand
26340     for particular classes of registers or other arbitrary operand
26341     types.  `d', `a' and `f' are defined on the 68000/68020 to stand
26342     for data, address and floating point registers.
26343
26344
26345File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints
26346
263476.42.2 Multiple Alternative Constraints
26348---------------------------------------
26349
26350Sometimes a single instruction has multiple alternative sets of possible
26351operands.  For example, on the 68000, a logical-or instruction can
26352combine register or an immediate value into memory, or it can combine
26353any kind of operand into a register; but it cannot combine one memory
26354location into another.
26355
26356 These constraints are represented as multiple alternatives.  An
26357alternative can be described by a series of letters for each operand.
26358The overall constraint for an operand is made from the letters for this
26359operand from the first alternative, a comma, the letters for this
26360operand from the second alternative, a comma, and so on until the last
26361alternative.
26362
26363 If all the operands fit any one alternative, the instruction is valid.
26364Otherwise, for each alternative, the compiler counts how many
26365instructions must be added to copy the operands so that that
26366alternative applies.  The alternative requiring the least copying is
26367chosen.  If two alternatives need the same amount of copying, the one
26368that comes first is chosen.  These choices can be altered with the `?'
26369and `!' characters:
26370
26371`?'
26372     Disparage slightly the alternative that the `?' appears in, as a
26373     choice when no alternative applies exactly.  The compiler regards
26374     this alternative as one unit more costly for each `?' that appears
26375     in it.
26376
26377`!'
26378     Disparage severely the alternative that the `!' appears in.  This
26379     alternative can still be used if it fits without reloading, but if
26380     reloading is needed, some other alternative will be used.
26381
26382
26383File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
26384
263856.42.3 Constraint Modifier Characters
26386-------------------------------------
26387
26388Here are constraint modifier characters.
26389
26390`='
26391     Means that this operand is write-only for this instruction: the
26392     previous value is discarded and replaced by output data.
26393
26394`+'
26395     Means that this operand is both read and written by the
26396     instruction.
26397
26398     When the compiler fixes up the operands to satisfy the constraints,
26399     it needs to know which operands are inputs to the instruction and
26400     which are outputs from it.  `=' identifies an output; `+'
26401     identifies an operand that is both input and output; all other
26402     operands are assumed to be input only.
26403
26404     If you specify `=' or `+' in a constraint, you put it in the first
26405     character of the constraint string.
26406
26407`&'
26408     Means (in a particular alternative) that this operand is an
26409     "earlyclobber" operand, which is modified before the instruction is
26410     finished using the input operands.  Therefore, this operand may
26411     not lie in a register that is used as an input operand or as part
26412     of any memory address.
26413
26414     `&' applies only to the alternative in which it is written.  In
26415     constraints with multiple alternatives, sometimes one alternative
26416     requires `&' while others do not.  See, for example, the `movdf'
26417     insn of the 68000.
26418
26419     An input operand can be tied to an earlyclobber operand if its only
26420     use as an input occurs before the early result is written.  Adding
26421     alternatives of this form often allows GCC to produce better code
26422     when only some of the inputs can be affected by the earlyclobber.
26423     See, for example, the `mulsi3' insn of the ARM.
26424
26425     `&' does not obviate the need to write `='.
26426
26427`%'
26428     Declares the instruction to be commutative for this operand and the
26429     following operand.  This means that the compiler may interchange
26430     the two operands if that is the cheapest way to make all operands
26431     fit the constraints.  GCC can only handle one commutative pair in
26432     an asm; if you use more, the compiler may fail.  Note that you
26433     need not use the modifier if the two alternatives are strictly
26434     identical; this would only waste time in the reload pass.  The
26435     modifier is not operational after register allocation, so the
26436     result of `define_peephole2' and `define_split's performed after
26437     reload cannot rely on `%' to make the intended insn match.
26438
26439`#'
26440     Says that all following characters, up to the next comma, are to be
26441     ignored as a constraint.  They are significant only for choosing
26442     register preferences.
26443
26444`*'
26445     Says that the following character should be ignored when choosing
26446     register preferences.  `*' has no effect on the meaning of the
26447     constraint as a constraint, and no effect on reloading.  For LRA
26448     `*' additionally disparages slightly the alternative if the
26449     following character matches the operand.
26450
26451
26452
26453File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
26454
264556.42.4 Constraints for Particular Machines
26456------------------------------------------
26457
26458Whenever possible, you should use the general-purpose constraint letters
26459in `asm' arguments, since they will convey meaning more readily to
26460people reading your code.  Failing that, use the constraint letters
26461that usually have very similar meanings across architectures.  The most
26462commonly used constraints are `m' and `r' (for memory and
26463general-purpose registers respectively; *note Simple Constraints::), and
26464`I', usually the letter indicating the most common immediate-constant
26465format.
26466
26467 Each architecture defines additional constraints.  These constraints
26468are used by the compiler itself for instruction generation, as well as
26469for `asm' statements; therefore, some of the constraints are not
26470particularly useful for `asm'.  Here is a summary of some of the
26471machine-dependent constraints available on some particular machines; it
26472includes both constraints that are useful for `asm' and constraints
26473that aren't.  The compiler source file mentioned in the table heading
26474for each architecture is the definitive reference for the meanings of
26475that architecture's constraints.
26476
26477_AArch64 family--`config/aarch64/constraints.md'_
26478
26479    `k'
26480          The stack pointer register (`SP')
26481
26482    `w'
26483          Floating point or SIMD vector register
26484
26485    `I'
26486          Integer constant that is valid as an immediate operand in an
26487          `ADD' instruction
26488
26489    `J'
26490          Integer constant that is valid as an immediate operand in a
26491          `SUB' instruction (once negated)
26492
26493    `K'
26494          Integer constant that can be used with a 32-bit logical
26495          instruction
26496
26497    `L'
26498          Integer constant that can be used with a 64-bit logical
26499          instruction
26500
26501    `M'
26502          Integer constant that is valid as an immediate operand in a
26503          32-bit `MOV' pseudo instruction. The `MOV' may be assembled
26504          to one of several different machine instructions depending on
26505          the value
26506
26507    `N'
26508          Integer constant that is valid as an immediate operand in a
26509          64-bit `MOV' pseudo instruction
26510
26511    `S'
26512          An absolute symbolic address or a label reference
26513
26514    `Y'
26515          Floating point constant zero
26516
26517    `Z'
26518          Integer constant zero
26519
26520    `Usa'
26521          An absolute symbolic address
26522
26523    `Ush'
26524          The high part (bits 12 and upwards) of the pc-relative
26525          address of a symbol within 4GB of the instruction
26526
26527    `Q'
26528          A memory address which uses a single base register with no
26529          offset
26530
26531    `Ump'
26532          A memory address suitable for a load/store pair instruction
26533          in SI, DI, SF and DF modes
26534
26535
26536_ARM family--`config/arm/constraints.md'_
26537
26538    `w'
26539          VFP floating-point register
26540
26541    `G'
26542          The floating-point constant 0.0
26543
26544    `I'
26545          Integer that is valid as an immediate operand in a data
26546          processing instruction.  That is, an integer in the range 0
26547          to 255 rotated by a multiple of 2
26548
26549    `J'
26550          Integer in the range -4095 to 4095
26551
26552    `K'
26553          Integer that satisfies constraint `I' when inverted (ones
26554          complement)
26555
26556    `L'
26557          Integer that satisfies constraint `I' when negated (twos
26558          complement)
26559
26560    `M'
26561          Integer in the range 0 to 32
26562
26563    `Q'
26564          A memory reference where the exact address is in a single
26565          register (``m'' is preferable for `asm' statements)
26566
26567    `R'
26568          An item in the constant pool
26569
26570    `S'
26571          A symbol in the text segment of the current file
26572
26573    `Uv'
26574          A memory reference suitable for VFP load/store insns
26575          (reg+constant offset)
26576
26577    `Uy'
26578          A memory reference suitable for iWMMXt load/store
26579          instructions.
26580
26581    `Uq'
26582          A memory reference suitable for the ARMv4 ldrsb instruction.
26583
26584_AVR family--`config/avr/constraints.md'_
26585
26586    `l'
26587          Registers from r0 to r15
26588
26589    `a'
26590          Registers from r16 to r23
26591
26592    `d'
26593          Registers from r16 to r31
26594
26595    `w'
26596          Registers from r24 to r31.  These registers can be used in
26597          `adiw' command
26598
26599    `e'
26600          Pointer register (r26-r31)
26601
26602    `b'
26603          Base pointer register (r28-r31)
26604
26605    `q'
26606          Stack pointer register (SPH:SPL)
26607
26608    `t'
26609          Temporary register r0
26610
26611    `x'
26612          Register pair X (r27:r26)
26613
26614    `y'
26615          Register pair Y (r29:r28)
26616
26617    `z'
26618          Register pair Z (r31:r30)
26619
26620    `I'
26621          Constant greater than -1, less than 64
26622
26623    `J'
26624          Constant greater than -64, less than 1
26625
26626    `K'
26627          Constant integer 2
26628
26629    `L'
26630          Constant integer 0
26631
26632    `M'
26633          Constant that fits in 8 bits
26634
26635    `N'
26636          Constant integer -1
26637
26638    `O'
26639          Constant integer 8, 16, or 24
26640
26641    `P'
26642          Constant integer 1
26643
26644    `G'
26645          A floating point constant 0.0
26646
26647    `Q'
26648          A memory address based on Y or Z pointer with displacement.
26649
26650_Epiphany--`config/epiphany/constraints.md'_
26651
26652    `U16'
26653          An unsigned 16-bit constant.
26654
26655    `K'
26656          An unsigned 5-bit constant.
26657
26658    `L'
26659          A signed 11-bit constant.
26660
26661    `Cm1'
26662          A signed 11-bit constant added to -1.  Can only match when
26663          the `-m1reg-REG' option is active.
26664
26665    `Cl1'
26666          Left-shift of -1, i.e., a bit mask with a block of leading
26667          ones, the rest being a block of trailing zeroes.  Can only
26668          match when the `-m1reg-REG' option is active.
26669
26670    `Cr1'
26671          Right-shift of -1, i.e., a bit mask with a trailing block of
26672          ones, the rest being zeroes.  Or to put it another way, one
26673          less than a power of two.  Can only match when the
26674          `-m1reg-REG' option is active.
26675
26676    `Cal'
26677          Constant for arithmetic/logical operations.  This is like
26678          `i', except that for position independent code, no symbols /
26679          expressions needing relocations are allowed.
26680
26681    `Csy'
26682          Symbolic constant for call/jump instruction.
26683
26684    `Rcs'
26685          The register class usable in short insns.  This is a register
26686          class constraint, and can thus drive register allocation.
26687          This constraint won't match unless `-mprefer-short-insn-regs'
26688          is in effect.
26689
26690    `Rsc'
26691          The the register class of registers that can be used to hold a
26692          sibcall call address.  I.e., a caller-saved register.
26693
26694    `Rct'
26695          Core control register class.
26696
26697    `Rgs'
26698          The register group usable in short insns.  This constraint
26699          does not use a register class, so that it only passively
26700          matches suitable registers, and doesn't drive register
26701          allocation.
26702
26703    `Rra'
26704          Matches the return address if it can be replaced with the
26705          link register.
26706
26707    `Rcc'
26708          Matches the integer condition code register.
26709
26710    `Sra'
26711          Matches the return address if it is in a stack slot.
26712
26713    `Cfm'
26714          Matches control register values to switch fp mode, which are
26715          encapsulated in `UNSPEC_FP_MODE'.
26716
26717_CR16 Architecture--`config/cr16/cr16.h'_
26718
26719    `b'
26720          Registers from r0 to r14 (registers without stack pointer)
26721
26722    `t'
26723          Register from r0 to r11 (all 16-bit registers)
26724
26725    `p'
26726          Register from r12 to r15 (all 32-bit registers)
26727
26728    `I'
26729          Signed constant that fits in 4 bits
26730
26731    `J'
26732          Signed constant that fits in 5 bits
26733
26734    `K'
26735          Signed constant that fits in 6 bits
26736
26737    `L'
26738          Unsigned constant that fits in 4 bits
26739
26740    `M'
26741          Signed constant that fits in 32 bits
26742
26743    `N'
26744          Check for 64 bits wide constants for add/sub instructions
26745
26746    `G'
26747          Floating point constant that is legal for store immediate
26748
26749_Hewlett-Packard PA-RISC--`config/pa/pa.h'_
26750
26751    `a'
26752          General register 1
26753
26754    `f'
26755          Floating point register
26756
26757    `q'
26758          Shift amount register
26759
26760    `x'
26761          Floating point register (deprecated)
26762
26763    `y'
26764          Upper floating point register (32-bit), floating point
26765          register (64-bit)
26766
26767    `Z'
26768          Any register
26769
26770    `I'
26771          Signed 11-bit integer constant
26772
26773    `J'
26774          Signed 14-bit integer constant
26775
26776    `K'
26777          Integer constant that can be deposited with a `zdepi'
26778          instruction
26779
26780    `L'
26781          Signed 5-bit integer constant
26782
26783    `M'
26784          Integer constant 0
26785
26786    `N'
26787          Integer constant that can be loaded with a `ldil' instruction
26788
26789    `O'
26790          Integer constant whose value plus one is a power of 2
26791
26792    `P'
26793          Integer constant that can be used for `and' operations in
26794          `depi' and `extru' instructions
26795
26796    `S'
26797          Integer constant 31
26798
26799    `U'
26800          Integer constant 63
26801
26802    `G'
26803          Floating-point constant 0.0
26804
26805    `A'
26806          A `lo_sum' data-linkage-table memory operand
26807
26808    `Q'
26809          A memory operand that can be used as the destination operand
26810          of an integer store instruction
26811
26812    `R'
26813          A scaled or unscaled indexed memory operand
26814
26815    `T'
26816          A memory operand for floating-point loads and stores
26817
26818    `W'
26819          A register indirect memory operand
26820
26821_picoChip family--`picochip.h'_
26822
26823    `k'
26824          Stack register.
26825
26826    `f'
26827          Pointer register.  A register which can be used to access
26828          memory without supplying an offset.  Any other register can
26829          be used to access memory, but will need a constant offset.
26830          In the case of the offset being zero, it is more efficient to
26831          use a pointer register, since this reduces code size.
26832
26833    `t'
26834          A twin register.  A register which may be paired with an
26835          adjacent register to create a 32-bit register.
26836
26837    `a'
26838          Any absolute memory address (e.g., symbolic constant, symbolic
26839          constant + offset).
26840
26841    `I'
26842          4-bit signed integer.
26843
26844    `J'
26845          4-bit unsigned integer.
26846
26847    `K'
26848          8-bit signed integer.
26849
26850    `M'
26851          Any constant whose absolute value is no greater than 4-bits.
26852
26853    `N'
26854          10-bit signed integer
26855
26856    `O'
26857          16-bit signed integer.
26858
26859
26860_PowerPC and IBM RS6000--`config/rs6000/constraints.md'_
26861
26862    `b'
26863          Address base register
26864
26865    `d'
26866          Floating point register (containing 64-bit value)
26867
26868    `f'
26869          Floating point register (containing 32-bit value)
26870
26871    `v'
26872          Altivec vector register
26873
26874    `wa'
26875          Any VSX register if the -mvsx option was used or NO_REGS.
26876
26877          When using any of the register constraints (`wa', `wd', `wf',
26878          `wg', `wh', `wi', `wj', `wk', `wl', `wm', `ws', `wt', `wu',
26879          `wv', `ww', or `wy') that take VSX registers, you must use
26880          `%x<n>' in the template so that the correct register is used.
26881          Otherwise the register number output in the assembly file
26882          will be incorrect if an Altivec register is an operand of a
26883          VSX instruction that expects VSX register numbering.
26884
26885               asm ("xvadddp %x0,%x1,%x2" : "=wa" (v1) : "wa" (v2), "wa" (v3));
26886
26887          is correct, but:
26888
26889               asm ("xvadddp %0,%1,%2" : "=wa" (v1) : "wa" (v2), "wa" (v3));
26890
26891          is not correct.
26892
26893    `wd'
26894          VSX vector register to hold vector double data or NO_REGS.
26895
26896    `wf'
26897          VSX vector register to hold vector float data or NO_REGS.
26898
26899    `wg'
26900          If `-mmfpgpr' was used, a floating point register or NO_REGS.
26901
26902    `wh'
26903          Floating point register if direct moves are available, or
26904          NO_REGS.
26905
26906    `wi'
26907          FP or VSX register to hold 64-bit integers for VSX insns or
26908          NO_REGS.
26909
26910    `wj'
26911          FP or VSX register to hold 64-bit integers for direct moves
26912          or NO_REGS.
26913
26914    `wk'
26915          FP or VSX register to hold 64-bit doubles for direct moves or
26916          NO_REGS.
26917
26918    `wl'
26919          Floating point register if the LFIWAX instruction is enabled
26920          or NO_REGS.
26921
26922    `wm'
26923          VSX register if direct move instructions are enabled, or
26924          NO_REGS.
26925
26926    `wn'
26927          No register (NO_REGS).
26928
26929    `wr'
26930          General purpose register if 64-bit instructions are enabled
26931          or NO_REGS.
26932
26933    `ws'
26934          VSX vector register to hold scalar double values or NO_REGS.
26935
26936    `wt'
26937          VSX vector register to hold 128 bit integer or NO_REGS.
26938
26939    `wu'
26940          Altivec register to use for float/32-bit int loads/stores  or
26941          NO_REGS.
26942
26943    `wv'
26944          Altivec register to use for double loads/stores  or NO_REGS.
26945
26946    `ww'
26947          FP or VSX register to perform float operations under `-mvsx'
26948          or NO_REGS.
26949
26950    `wx'
26951          Floating point register if the STFIWX instruction is enabled
26952          or NO_REGS.
26953
26954    `wy'
26955          FP or VSX register to perform ISA 2.07 float ops or NO_REGS.
26956
26957    `wz'
26958          Floating point register if the LFIWZX instruction is enabled
26959          or NO_REGS.
26960
26961    `wQ'
26962          A memory address that will work with the `lq' and `stq'
26963          instructions.
26964
26965    `h'
26966          `MQ', `CTR', or `LINK' register
26967
26968    `q'
26969          `MQ' register
26970
26971    `c'
26972          `CTR' register
26973
26974    `l'
26975          `LINK' register
26976
26977    `x'
26978          `CR' register (condition register) number 0
26979
26980    `y'
26981          `CR' register (condition register)
26982
26983    `z'
26984          `XER[CA]' carry bit (part of the XER register)
26985
26986    `I'
26987          Signed 16-bit constant
26988
26989    `J'
26990          Unsigned 16-bit constant shifted left 16 bits (use `L'
26991          instead for `SImode' constants)
26992
26993    `K'
26994          Unsigned 16-bit constant
26995
26996    `L'
26997          Signed 16-bit constant shifted left 16 bits
26998
26999    `M'
27000          Constant larger than 31
27001
27002    `N'
27003          Exact power of 2
27004
27005    `O'
27006          Zero
27007
27008    `P'
27009          Constant whose negation is a signed 16-bit constant
27010
27011    `G'
27012          Floating point constant that can be loaded into a register
27013          with one instruction per word
27014
27015    `H'
27016          Integer/Floating point constant that can be loaded into a
27017          register using three instructions
27018
27019    `m'
27020          Memory operand.  Normally, `m' does not allow addresses that
27021          update the base register.  If `<' or `>' constraint is also
27022          used, they are allowed and therefore on PowerPC targets in
27023          that case it is only safe to use `m<>' in an `asm' statement
27024          if that `asm' statement accesses the operand exactly once.
27025          The `asm' statement must also use `%U<OPNO>' as a placeholder
27026          for the "update" flag in the corresponding load or store
27027          instruction.  For example:
27028
27029               asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
27030
27031          is correct but:
27032
27033               asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
27034
27035          is not.
27036
27037    `es'
27038          A "stable" memory operand; that is, one which does not
27039          include any automodification of the base register.  This used
27040          to be useful when `m' allowed automodification of the base
27041          register, but as those are now only allowed when `<' or `>'
27042          is used, `es' is basically the same as `m' without `<' and
27043          `>'.
27044
27045    `Q'
27046          Memory operand that is an offset from a register (it is
27047          usually better to use `m' or `es' in `asm' statements)
27048
27049    `Z'
27050          Memory operand that is an indexed or indirect from a register
27051          (it is usually better to use `m' or `es' in `asm' statements)
27052
27053    `R'
27054          AIX TOC entry
27055
27056    `a'
27057          Address operand that is an indexed or indirect from a
27058          register (`p' is preferable for `asm' statements)
27059
27060    `S'
27061          Constant suitable as a 64-bit mask operand
27062
27063    `T'
27064          Constant suitable as a 32-bit mask operand
27065
27066    `U'
27067          System V Release 4 small data area reference
27068
27069    `t'
27070          AND masks that can be performed by two rldic{l, r}
27071          instructions
27072
27073    `W'
27074          Vector constant that does not require memory
27075
27076    `j'
27077          Vector constant that is all zeros.
27078
27079
27080_Intel 386--`config/i386/constraints.md'_
27081
27082    `R'
27083          Legacy register--the eight integer registers available on all
27084          i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp').
27085
27086    `q'
27087          Any register accessible as `Rl'.  In 32-bit mode, `a', `b',
27088          `c', and `d'; in 64-bit mode, any integer register.
27089
27090    `Q'
27091          Any register accessible as `Rh': `a', `b', `c', and `d'.
27092
27093    `a'
27094          The `a' register.
27095
27096    `b'
27097          The `b' register.
27098
27099    `c'
27100          The `c' register.
27101
27102    `d'
27103          The `d' register.
27104
27105    `S'
27106          The `si' register.
27107
27108    `D'
27109          The `di' register.
27110
27111    `A'
27112          The `a' and `d' registers.  This class is used for
27113          instructions that return double word results in the `ax:dx'
27114          register pair.  Single word values will be allocated either
27115          in `ax' or `dx'.  For example on i386 the following
27116          implements `rdtsc':
27117
27118               unsigned long long rdtsc (void)
27119               {
27120                 unsigned long long tick;
27121                 __asm__ __volatile__("rdtsc":"=A"(tick));
27122                 return tick;
27123               }
27124
27125          This is not correct on x86_64 as it would allocate tick in
27126          either `ax' or `dx'.  You have to use the following variant
27127          instead:
27128
27129               unsigned long long rdtsc (void)
27130               {
27131                 unsigned int tickl, tickh;
27132                 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
27133                 return ((unsigned long long)tickh << 32)|tickl;
27134               }
27135
27136    `f'
27137          Any 80387 floating-point (stack) register.
27138
27139    `t'
27140          Top of 80387 floating-point stack (`%st(0)').
27141
27142    `u'
27143          Second from top of 80387 floating-point stack (`%st(1)').
27144
27145    `y'
27146          Any MMX register.
27147
27148    `x'
27149          Any SSE register.
27150
27151    `Yz'
27152          First SSE register (`%xmm0').
27153
27154    `I'
27155          Integer constant in the range 0 ... 31, for 32-bit shifts.
27156
27157    `J'
27158          Integer constant in the range 0 ... 63, for 64-bit shifts.
27159
27160    `K'
27161          Signed 8-bit integer constant.
27162
27163    `L'
27164          `0xFF' or `0xFFFF', for andsi as a zero-extending move.
27165
27166    `M'
27167          0, 1, 2, or 3 (shifts for the `lea' instruction).
27168
27169    `N'
27170          Unsigned 8-bit integer constant (for `in' and `out'
27171          instructions).
27172
27173    `G'
27174          Standard 80387 floating point constant.
27175
27176    `C'
27177          Standard SSE floating point constant.
27178
27179    `e'
27180          32-bit signed integer constant, or a symbolic reference known
27181          to fit that range (for immediate operands in sign-extending
27182          x86-64 instructions).
27183
27184    `Z'
27185          32-bit unsigned integer constant, or a symbolic reference
27186          known to fit that range (for immediate operands in
27187          zero-extending x86-64 instructions).
27188
27189
27190_Intel IA-64--`config/ia64/ia64.h'_
27191
27192    `a'
27193          General register `r0' to `r3' for `addl' instruction
27194
27195    `b'
27196          Branch register
27197
27198    `c'
27199          Predicate register (`c' as in "conditional")
27200
27201    `d'
27202          Application register residing in M-unit
27203
27204    `e'
27205          Application register residing in I-unit
27206
27207    `f'
27208          Floating-point register
27209
27210    `m'
27211          Memory operand.  If used together with `<' or `>', the
27212          operand can have postincrement and postdecrement which
27213          require printing with `%Pn' on IA-64.
27214
27215    `G'
27216          Floating-point constant 0.0 or 1.0
27217
27218    `I'
27219          14-bit signed integer constant
27220
27221    `J'
27222          22-bit signed integer constant
27223
27224    `K'
27225          8-bit signed integer constant for logical instructions
27226
27227    `L'
27228          8-bit adjusted signed integer constant for compare pseudo-ops
27229
27230    `M'
27231          6-bit unsigned integer constant for shift counts
27232
27233    `N'
27234          9-bit signed integer constant for load and store
27235          postincrements
27236
27237    `O'
27238          The constant zero
27239
27240    `P'
27241          0 or -1 for `dep' instruction
27242
27243    `Q'
27244          Non-volatile memory for floating-point loads and stores
27245
27246    `R'
27247          Integer constant in the range 1 to 4 for `shladd' instruction
27248
27249    `S'
27250          Memory operand except postincrement and postdecrement.  This
27251          is now roughly the same as `m' when not used together with `<'
27252          or `>'.
27253
27254_FRV--`config/frv/frv.h'_
27255
27256    `a'
27257          Register in the class `ACC_REGS' (`acc0' to `acc7').
27258
27259    `b'
27260          Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
27261
27262    `c'
27263          Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
27264          to `icc3').
27265
27266    `d'
27267          Register in the class `GPR_REGS' (`gr0' to `gr63').
27268
27269    `e'
27270          Register in the class `EVEN_REGS' (`gr0' to `gr63').  Odd
27271          registers are excluded not in the class but through the use
27272          of a machine mode larger than 4 bytes.
27273
27274    `f'
27275          Register in the class `FPR_REGS' (`fr0' to `fr63').
27276
27277    `h'
27278          Register in the class `FEVEN_REGS' (`fr0' to `fr63').  Odd
27279          registers are excluded not in the class but through the use
27280          of a machine mode larger than 4 bytes.
27281
27282    `l'
27283          Register in the class `LR_REG' (the `lr' register).
27284
27285    `q'
27286          Register in the class `QUAD_REGS' (`gr2' to `gr63').
27287          Register numbers not divisible by 4 are excluded not in the
27288          class but through the use of a machine mode larger than 8
27289          bytes.
27290
27291    `t'
27292          Register in the class `ICC_REGS' (`icc0' to `icc3').
27293
27294    `u'
27295          Register in the class `FCC_REGS' (`fcc0' to `fcc3').
27296
27297    `v'
27298          Register in the class `ICR_REGS' (`cc4' to `cc7').
27299
27300    `w'
27301          Register in the class `FCR_REGS' (`cc0' to `cc3').
27302
27303    `x'
27304          Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63').
27305          Register numbers not divisible by 4 are excluded not in the
27306          class but through the use of a machine mode larger than 8
27307          bytes.
27308
27309    `z'
27310          Register in the class `SPR_REGS' (`lcr' and `lr').
27311
27312    `A'
27313          Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
27314
27315    `B'
27316          Register in the class `ACCG_REGS' (`accg0' to `accg7').
27317
27318    `C'
27319          Register in the class `CR_REGS' (`cc0' to `cc7').
27320
27321    `G'
27322          Floating point constant zero
27323
27324    `I'
27325          6-bit signed integer constant
27326
27327    `J'
27328          10-bit signed integer constant
27329
27330    `L'
27331          16-bit signed integer constant
27332
27333    `M'
27334          16-bit unsigned integer constant
27335
27336    `N'
27337          12-bit signed integer constant that is negative--i.e. in the
27338          range of -2048 to -1
27339
27340    `O'
27341          Constant zero
27342
27343    `P'
27344          12-bit signed integer constant that is greater than
27345          zero--i.e. in the range of 1 to 2047.
27346
27347
27348_Blackfin family--`config/bfin/constraints.md'_
27349
27350    `a'
27351          P register
27352
27353    `d'
27354          D register
27355
27356    `z'
27357          A call clobbered P register.
27358
27359    `qN'
27360          A single register.  If N is in the range 0 to 7, the
27361          corresponding D register.  If it is `A', then the register P0.
27362
27363    `D'
27364          Even-numbered D register
27365
27366    `W'
27367          Odd-numbered D register
27368
27369    `e'
27370          Accumulator register.
27371
27372    `A'
27373          Even-numbered accumulator register.
27374
27375    `B'
27376          Odd-numbered accumulator register.
27377
27378    `b'
27379          I register
27380
27381    `v'
27382          B register
27383
27384    `f'
27385          M register
27386
27387    `c'
27388          Registers used for circular buffering, i.e. I, B, or L
27389          registers.
27390
27391    `C'
27392          The CC register.
27393
27394    `t'
27395          LT0 or LT1.
27396
27397    `k'
27398          LC0 or LC1.
27399
27400    `u'
27401          LB0 or LB1.
27402
27403    `x'
27404          Any D, P, B, M, I or L register.
27405
27406    `y'
27407          Additional registers typically used only in prologues and
27408          epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
27409          USP.
27410
27411    `w'
27412          Any register except accumulators or CC.
27413
27414    `Ksh'
27415          Signed 16 bit integer (in the range -32768 to 32767)
27416
27417    `Kuh'
27418          Unsigned 16 bit integer (in the range 0 to 65535)
27419
27420    `Ks7'
27421          Signed 7 bit integer (in the range -64 to 63)
27422
27423    `Ku7'
27424          Unsigned 7 bit integer (in the range 0 to 127)
27425
27426    `Ku5'
27427          Unsigned 5 bit integer (in the range 0 to 31)
27428
27429    `Ks4'
27430          Signed 4 bit integer (in the range -8 to 7)
27431
27432    `Ks3'
27433          Signed 3 bit integer (in the range -3 to 4)
27434
27435    `Ku3'
27436          Unsigned 3 bit integer (in the range 0 to 7)
27437
27438    `PN'
27439          Constant N, where N is a single-digit constant in the range 0
27440          to 4.
27441
27442    `PA'
27443          An integer equal to one of the MACFLAG_XXX constants that is
27444          suitable for use with either accumulator.
27445
27446    `PB'
27447          An integer equal to one of the MACFLAG_XXX constants that is
27448          suitable for use only with accumulator A1.
27449
27450    `M1'
27451          Constant 255.
27452
27453    `M2'
27454          Constant 65535.
27455
27456    `J'
27457          An integer constant with exactly a single bit set.
27458
27459    `L'
27460          An integer constant with all bits set except exactly one.
27461
27462    `H'
27463
27464    `Q'
27465          Any SYMBOL_REF.
27466
27467_M32C--`config/m32c/m32c.c'_
27468
27469    `Rsp'
27470    `Rfb'
27471    `Rsb'
27472          `$sp', `$fb', `$sb'.
27473
27474    `Rcr'
27475          Any control register, when they're 16 bits wide (nothing if
27476          control registers are 24 bits wide)
27477
27478    `Rcl'
27479          Any control register, when they're 24 bits wide.
27480
27481    `R0w'
27482    `R1w'
27483    `R2w'
27484    `R3w'
27485          $r0, $r1, $r2, $r3.
27486
27487    `R02'
27488          $r0 or $r2, or $r2r0 for 32 bit values.
27489
27490    `R13'
27491          $r1 or $r3, or $r3r1 for 32 bit values.
27492
27493    `Rdi'
27494          A register that can hold a 64 bit value.
27495
27496    `Rhl'
27497          $r0 or $r1 (registers with addressable high/low bytes)
27498
27499    `R23'
27500          $r2 or $r3
27501
27502    `Raa'
27503          Address registers
27504
27505    `Raw'
27506          Address registers when they're 16 bits wide.
27507
27508    `Ral'
27509          Address registers when they're 24 bits wide.
27510
27511    `Rqi'
27512          Registers that can hold QI values.
27513
27514    `Rad'
27515          Registers that can be used with displacements ($a0, $a1, $sb).
27516
27517    `Rsi'
27518          Registers that can hold 32 bit values.
27519
27520    `Rhi'
27521          Registers that can hold 16 bit values.
27522
27523    `Rhc'
27524          Registers chat can hold 16 bit values, including all control
27525          registers.
27526
27527    `Rra'
27528          $r0 through R1, plus $a0 and $a1.
27529
27530    `Rfl'
27531          The flags register.
27532
27533    `Rmm'
27534          The memory-based pseudo-registers $mem0 through $mem15.
27535
27536    `Rpi'
27537          Registers that can hold pointers (16 bit registers for r8c,
27538          m16c; 24 bit registers for m32cm, m32c).
27539
27540    `Rpa'
27541          Matches multiple registers in a PARALLEL to form a larger
27542          register.  Used to match function return values.
27543
27544    `Is3'
27545          -8 ... 7
27546
27547    `IS1'
27548          -128 ... 127
27549
27550    `IS2'
27551          -32768 ... 32767
27552
27553    `IU2'
27554          0 ... 65535
27555
27556    `In4'
27557          -8 ... -1 or 1 ... 8
27558
27559    `In5'
27560          -16 ... -1 or 1 ... 16
27561
27562    `In6'
27563          -32 ... -1 or 1 ... 32
27564
27565    `IM2'
27566          -65536 ... -1
27567
27568    `Ilb'
27569          An 8 bit value with exactly one bit set.
27570
27571    `Ilw'
27572          A 16 bit value with exactly one bit set.
27573
27574    `Sd'
27575          The common src/dest memory addressing modes.
27576
27577    `Sa'
27578          Memory addressed using $a0 or $a1.
27579
27580    `Si'
27581          Memory addressed with immediate addresses.
27582
27583    `Ss'
27584          Memory addressed using the stack pointer ($sp).
27585
27586    `Sf'
27587          Memory addressed using the frame base register ($fb).
27588
27589    `Ss'
27590          Memory addressed using the small base register ($sb).
27591
27592    `S1'
27593          $r1h
27594
27595_MeP--`config/mep/constraints.md'_
27596
27597    `a'
27598          The $sp register.
27599
27600    `b'
27601          The $tp register.
27602
27603    `c'
27604          Any control register.
27605
27606    `d'
27607          Either the $hi or the $lo register.
27608
27609    `em'
27610          Coprocessor registers that can be directly loaded ($c0-$c15).
27611
27612    `ex'
27613          Coprocessor registers that can be moved to each other.
27614
27615    `er'
27616          Coprocessor registers that can be moved to core registers.
27617
27618    `h'
27619          The $hi register.
27620
27621    `j'
27622          The $rpc register.
27623
27624    `l'
27625          The $lo register.
27626
27627    `t'
27628          Registers which can be used in $tp-relative addressing.
27629
27630    `v'
27631          The $gp register.
27632
27633    `x'
27634          The coprocessor registers.
27635
27636    `y'
27637          The coprocessor control registers.
27638
27639    `z'
27640          The $0 register.
27641
27642    `A'
27643          User-defined register set A.
27644
27645    `B'
27646          User-defined register set B.
27647
27648    `C'
27649          User-defined register set C.
27650
27651    `D'
27652          User-defined register set D.
27653
27654    `I'
27655          Offsets for $gp-rel addressing.
27656
27657    `J'
27658          Constants that can be used directly with boolean insns.
27659
27660    `K'
27661          Constants that can be moved directly to registers.
27662
27663    `L'
27664          Small constants that can be added to registers.
27665
27666    `M'
27667          Long shift counts.
27668
27669    `N'
27670          Small constants that can be compared to registers.
27671
27672    `O'
27673          Constants that can be loaded into the top half of registers.
27674
27675    `S'
27676          Signed 8-bit immediates.
27677
27678    `T'
27679          Symbols encoded for $tp-rel or $gp-rel addressing.
27680
27681    `U'
27682          Non-constant addresses for loading/saving coprocessor
27683          registers.
27684
27685    `W'
27686          The top half of a symbol's value.
27687
27688    `Y'
27689          A register indirect address without offset.
27690
27691    `Z'
27692          Symbolic references to the control bus.
27693
27694
27695_MicroBlaze--`config/microblaze/constraints.md'_
27696
27697    `d'
27698          A general register (`r0' to `r31').
27699
27700    `z'
27701          A status register (`rmsr', `$fcc1' to `$fcc7').
27702
27703
27704_MIPS--`config/mips/constraints.md'_
27705
27706    `d'
27707          An address register.  This is equivalent to `r' unless
27708          generating MIPS16 code.
27709
27710    `f'
27711          A floating-point register (if available).
27712
27713    `h'
27714          Formerly the `hi' register.  This constraint is no longer
27715          supported.
27716
27717    `l'
27718          The `lo' register.  Use this register to store values that are
27719          no bigger than a word.
27720
27721    `x'
27722          The concatenated `hi' and `lo' registers.  Use this register
27723          to store doubleword values.
27724
27725    `c'
27726          A register suitable for use in an indirect jump.  This will
27727          always be `$25' for `-mabicalls'.
27728
27729    `v'
27730          Register `$3'.  Do not use this constraint in new code; it is
27731          retained only for compatibility with glibc.
27732
27733    `y'
27734          Equivalent to `r'; retained for backwards compatibility.
27735
27736    `z'
27737          A floating-point condition code register.
27738
27739    `I'
27740          A signed 16-bit constant (for arithmetic instructions).
27741
27742    `J'
27743          Integer zero.
27744
27745    `K'
27746          An unsigned 16-bit constant (for logic instructions).
27747
27748    `L'
27749          A signed 32-bit constant in which the lower 16 bits are zero.
27750          Such constants can be loaded using `lui'.
27751
27752    `M'
27753          A constant that cannot be loaded using `lui', `addiu' or
27754          `ori'.
27755
27756    `N'
27757          A constant in the range -65535 to -1 (inclusive).
27758
27759    `O'
27760          A signed 15-bit constant.
27761
27762    `P'
27763          A constant in the range 1 to 65535 (inclusive).
27764
27765    `G'
27766          Floating-point zero.
27767
27768    `R'
27769          An address that can be used in a non-macro load or store.
27770
27771_Motorola 680x0--`config/m68k/constraints.md'_
27772
27773    `a'
27774          Address register
27775
27776    `d'
27777          Data register
27778
27779    `f'
27780          68881 floating-point register, if available
27781
27782    `I'
27783          Integer in the range 1 to 8
27784
27785    `J'
27786          16-bit signed number
27787
27788    `K'
27789          Signed number whose magnitude is greater than 0x80
27790
27791    `L'
27792          Integer in the range -8 to -1
27793
27794    `M'
27795          Signed number whose magnitude is greater than 0x100
27796
27797    `N'
27798          Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
27799
27800    `O'
27801          16 (for rotate using swap)
27802
27803    `P'
27804          Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
27805
27806    `R'
27807          Numbers that mov3q can handle
27808
27809    `G'
27810          Floating point constant that is not a 68881 constant
27811
27812    `S'
27813          Operands that satisfy 'm' when -mpcrel is in effect
27814
27815    `T'
27816          Operands that satisfy 's' when -mpcrel is not in effect
27817
27818    `Q'
27819          Address register indirect addressing mode
27820
27821    `U'
27822          Register offset addressing
27823
27824    `W'
27825          const_call_operand
27826
27827    `Cs'
27828          symbol_ref or const
27829
27830    `Ci'
27831          const_int
27832
27833    `C0'
27834          const_int 0
27835
27836    `Cj'
27837          Range of signed numbers that don't fit in 16 bits
27838
27839    `Cmvq'
27840          Integers valid for mvq
27841
27842    `Capsw'
27843          Integers valid for a moveq followed by a swap
27844
27845    `Cmvz'
27846          Integers valid for mvz
27847
27848    `Cmvs'
27849          Integers valid for mvs
27850
27851    `Ap'
27852          push_operand
27853
27854    `Ac'
27855          Non-register operands allowed in clr
27856
27857
27858_Moxie--`config/moxie/constraints.md'_
27859
27860    `A'
27861          An absolute address
27862
27863    `B'
27864          An offset address
27865
27866    `W'
27867          A register indirect memory operand
27868
27869    `I'
27870          A constant in the range of 0 to 255.
27871
27872    `N'
27873          A constant in the range of 0 to -255.
27874
27875
27876_PDP-11--`config/pdp11/constraints.md'_
27877
27878    `a'
27879          Floating point registers AC0 through AC3.  These can be
27880          loaded from/to memory with a single instruction.
27881
27882    `d'
27883          Odd numbered general registers (R1, R3, R5).  These are used
27884          for 16-bit multiply operations.
27885
27886    `f'
27887          Any of the floating point registers (AC0 through AC5).
27888
27889    `G'
27890          Floating point constant 0.
27891
27892    `I'
27893          An integer constant that fits in 16 bits.
27894
27895    `J'
27896          An integer constant whose low order 16 bits are zero.
27897
27898    `K'
27899          An integer constant that does not meet the constraints for
27900          codes `I' or `J'.
27901
27902    `L'
27903          The integer constant 1.
27904
27905    `M'
27906          The integer constant -1.
27907
27908    `N'
27909          The integer constant 0.
27910
27911    `O'
27912          Integer constants -4 through -1 and 1 through 4; shifts by
27913          these amounts are handled as multiple single-bit shifts
27914          rather than a single variable-length shift.
27915
27916    `Q'
27917          A memory reference which requires an additional word (address
27918          or offset) after the opcode.
27919
27920    `R'
27921          A memory reference that is encoded within the opcode.
27922
27923
27924_RL78--`config/rl78/constraints.md'_
27925
27926    `Int3'
27927          An integer constant in the range 1 ... 7.
27928
27929    `Int8'
27930          An integer constant in the range 0 ... 255.
27931
27932    `J'
27933          An integer constant in the range -255 ... 0
27934
27935    `K'
27936          The integer constant 1.
27937
27938    `L'
27939          The integer constant -1.
27940
27941    `M'
27942          The integer constant 0.
27943
27944    `N'
27945          The integer constant 2.
27946
27947    `O'
27948          The integer constant -2.
27949
27950    `P'
27951          An integer constant in the range 1 ... 15.
27952
27953    `Qbi'
27954          The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
27955
27956    `Qsc'
27957          The synthetic compare types-gt, lt, ge, and le.
27958
27959    `Wab'
27960          A memory reference with an absolute address.
27961
27962    `Wbc'
27963          A memory reference using `BC' as a base register, with an
27964          optional offset.
27965
27966    `Wca'
27967          A memory reference using `AX', `BC', `DE', or `HL' for the
27968          address, for calls.
27969
27970    `Wcv'
27971          A memory reference using any 16-bit register pair for the
27972          address, for calls.
27973
27974    `Wd2'
27975          A memory reference using `DE' as a base register, with an
27976          optional offset.
27977
27978    `Wde'
27979          A memory reference using `DE' as a base register, without any
27980          offset.
27981
27982    `Wfr'
27983          Any memory reference to an address in the far address space.
27984
27985    `Wh1'
27986          A memory reference using `HL' as a base register, with an
27987          optional one-byte offset.
27988
27989    `Whb'
27990          A memory reference using `HL' as a base register, with `B' or
27991          `C' as the index register.
27992
27993    `Whl'
27994          A memory reference using `HL' as a base register, without any
27995          offset.
27996
27997    `Ws1'
27998          A memory reference using `SP' as a base register, with an
27999          optional one-byte offset.
28000
28001    `Y'
28002          Any memory reference to an address in the near address space.
28003
28004    `A'
28005          The `AX' register.
28006
28007    `B'
28008          The `BC' register.
28009
28010    `D'
28011          The `DE' register.
28012
28013    `R'
28014          `A' through `L' registers.
28015
28016    `S'
28017          The `SP' register.
28018
28019    `T'
28020          The `HL' register.
28021
28022    `Z08W'
28023          The 16-bit `R8' register.
28024
28025    `Z10W'
28026          The 16-bit `R10' register.
28027
28028    `Zint'
28029          The registers reserved for interrupts (`R24' to `R31').
28030
28031    `a'
28032          The `A' register.
28033
28034    `b'
28035          The `B' register.
28036
28037    `c'
28038          The `C' register.
28039
28040    `d'
28041          The `D' register.
28042
28043    `e'
28044          The `E' register.
28045
28046    `h'
28047          The `H' register.
28048
28049    `l'
28050          The `L' register.
28051
28052    `v'
28053          The virtual registers.
28054
28055    `w'
28056          The `PSW' register.
28057
28058    `x'
28059          The `X' register.
28060
28061
28062_RX--`config/rx/constraints.md'_
28063
28064    `Q'
28065          An address which does not involve register indirect
28066          addressing or pre/post increment/decrement addressing.
28067
28068    `Symbol'
28069          A symbol reference.
28070
28071    `Int08'
28072          A constant in the range -256 to 255, inclusive.
28073
28074    `Sint08'
28075          A constant in the range -128 to 127, inclusive.
28076
28077    `Sint16'
28078          A constant in the range -32768 to 32767, inclusive.
28079
28080    `Sint24'
28081          A constant in the range -8388608 to 8388607, inclusive.
28082
28083    `Uint04'
28084          A constant in the range 0 to 15, inclusive.
28085
28086
28087_SPARC--`config/sparc/sparc.h'_
28088
28089    `f'
28090          Floating-point register on the SPARC-V8 architecture and
28091          lower floating-point register on the SPARC-V9 architecture.
28092
28093    `e'
28094          Floating-point register.  It is equivalent to `f' on the
28095          SPARC-V8 architecture and contains both lower and upper
28096          floating-point registers on the SPARC-V9 architecture.
28097
28098    `c'
28099          Floating-point condition code register.
28100
28101    `d'
28102          Lower floating-point register.  It is only valid on the
28103          SPARC-V9 architecture when the Visual Instruction Set is
28104          available.
28105
28106    `b'
28107          Floating-point register.  It is only valid on the SPARC-V9
28108          architecture when the Visual Instruction Set is available.
28109
28110    `h'
28111          64-bit global or out register for the SPARC-V8+ architecture.
28112
28113    `C'
28114          The constant all-ones, for floating-point.
28115
28116    `A'
28117          Signed 5-bit constant
28118
28119    `D'
28120          A vector constant
28121
28122    `I'
28123          Signed 13-bit constant
28124
28125    `J'
28126          Zero
28127
28128    `K'
28129          32-bit constant with the low 12 bits clear (a constant that
28130          can be loaded with the `sethi' instruction)
28131
28132    `L'
28133          A constant in the range supported by `movcc' instructions
28134          (11-bit signed immediate)
28135
28136    `M'
28137          A constant in the range supported by `movrcc' instructions
28138          (10-bit signed immediate)
28139
28140    `N'
28141          Same as `K', except that it verifies that bits that are not
28142          in the lower 32-bit range are all zero.  Must be used instead
28143          of `K' for modes wider than `SImode'
28144
28145    `O'
28146          The constant 4096
28147
28148    `G'
28149          Floating-point zero
28150
28151    `H'
28152          Signed 13-bit constant, sign-extended to 32 or 64 bits
28153
28154    `P'
28155          The constant -1
28156
28157    `Q'
28158          Floating-point constant whose integral representation can be
28159          moved into an integer register using a single sethi
28160          instruction
28161
28162    `R'
28163          Floating-point constant whose integral representation can be
28164          moved into an integer register using a single mov instruction
28165
28166    `S'
28167          Floating-point constant whose integral representation can be
28168          moved into an integer register using a high/lo_sum
28169          instruction sequence
28170
28171    `T'
28172          Memory address aligned to an 8-byte boundary
28173
28174    `U'
28175          Even register
28176
28177    `W'
28178          Memory address for `e' constraint registers
28179
28180    `w'
28181          Memory address with only a base register
28182
28183    `Y'
28184          Vector zero
28185
28186
28187_SPU--`config/spu/spu.h'_
28188
28189    `a'
28190          An immediate which can be loaded with the il/ila/ilh/ilhu
28191          instructions.  const_int is treated as a 64 bit value.
28192
28193    `c'
28194          An immediate for and/xor/or instructions.  const_int is
28195          treated as a 64 bit value.
28196
28197    `d'
28198          An immediate for the `iohl' instruction.  const_int is
28199          treated as a 64 bit value.
28200
28201    `f'
28202          An immediate which can be loaded with `fsmbi'.
28203
28204    `A'
28205          An immediate which can be loaded with the il/ila/ilh/ilhu
28206          instructions.  const_int is treated as a 32 bit value.
28207
28208    `B'
28209          An immediate for most arithmetic instructions.  const_int is
28210          treated as a 32 bit value.
28211
28212    `C'
28213          An immediate for and/xor/or instructions.  const_int is
28214          treated as a 32 bit value.
28215
28216    `D'
28217          An immediate for the `iohl' instruction.  const_int is
28218          treated as a 32 bit value.
28219
28220    `I'
28221          A constant in the range [-64, 63] for shift/rotate
28222          instructions.
28223
28224    `J'
28225          An unsigned 7-bit constant for conversion/nop/channel
28226          instructions.
28227
28228    `K'
28229          A signed 10-bit constant for most arithmetic instructions.
28230
28231    `M'
28232          A signed 16 bit immediate for `stop'.
28233
28234    `N'
28235          An unsigned 16-bit constant for `iohl' and `fsmbi'.
28236
28237    `O'
28238          An unsigned 7-bit constant whose 3 least significant bits are
28239          0.
28240
28241    `P'
28242          An unsigned 3-bit constant for 16-byte rotates and shifts
28243
28244    `R'
28245          Call operand, reg, for indirect calls
28246
28247    `S'
28248          Call operand, symbol, for relative calls.
28249
28250    `T'
28251          Call operand, const_int, for absolute calls.
28252
28253    `U'
28254          An immediate which can be loaded with the il/ila/ilh/ilhu
28255          instructions.  const_int is sign extended to 128 bit.
28256
28257    `W'
28258          An immediate for shift and rotate instructions.  const_int is
28259          treated as a 32 bit value.
28260
28261    `Y'
28262          An immediate for and/xor/or instructions.  const_int is sign
28263          extended as a 128 bit.
28264
28265    `Z'
28266          An immediate for the `iohl' instruction.  const_int is sign
28267          extended to 128 bit.
28268
28269
28270_S/390 and zSeries--`config/s390/s390.h'_
28271
28272    `a'
28273          Address register (general purpose register except r0)
28274
28275    `c'
28276          Condition code register
28277
28278    `d'
28279          Data register (arbitrary general purpose register)
28280
28281    `f'
28282          Floating-point register
28283
28284    `I'
28285          Unsigned 8-bit constant (0-255)
28286
28287    `J'
28288          Unsigned 12-bit constant (0-4095)
28289
28290    `K'
28291          Signed 16-bit constant (-32768-32767)
28292
28293    `L'
28294          Value appropriate as displacement.
28295         `(0..4095)'
28296               for short displacement
28297
28298         `(-524288..524287)'
28299               for long displacement
28300
28301    `M'
28302          Constant integer with a value of 0x7fffffff.
28303
28304    `N'
28305          Multiple letter constraint followed by 4 parameter letters.
28306         `0..9:'
28307               number of the part counting from most to least
28308               significant
28309
28310         `H,Q:'
28311               mode of the part
28312
28313         `D,S,H:'
28314               mode of the containing operand
28315
28316         `0,F:'
28317               value of the other parts (F--all bits set)
28318          The constraint matches if the specified part of a constant
28319          has a value different from its other parts.
28320
28321    `Q'
28322          Memory reference without index register and with short
28323          displacement.
28324
28325    `R'
28326          Memory reference with index register and short displacement.
28327
28328    `S'
28329          Memory reference without index register but with long
28330          displacement.
28331
28332    `T'
28333          Memory reference with index register and long displacement.
28334
28335    `U'
28336          Pointer with short displacement.
28337
28338    `W'
28339          Pointer with long displacement.
28340
28341    `Y'
28342          Shift count operand.
28343
28344
28345_Score family--`config/score/score.h'_
28346
28347    `d'
28348          Registers from r0 to r32.
28349
28350    `e'
28351          Registers from r0 to r16.
28352
28353    `t'
28354          r8--r11 or r22--r27 registers.
28355
28356    `h'
28357          hi register.
28358
28359    `l'
28360          lo register.
28361
28362    `x'
28363          hi + lo register.
28364
28365    `q'
28366          cnt register.
28367
28368    `y'
28369          lcb register.
28370
28371    `z'
28372          scb register.
28373
28374    `a'
28375          cnt + lcb + scb register.
28376
28377    `c'
28378          cr0--cr15 register.
28379
28380    `b'
28381          cp1 registers.
28382
28383    `f'
28384          cp2 registers.
28385
28386    `i'
28387          cp3 registers.
28388
28389    `j'
28390          cp1 + cp2 + cp3 registers.
28391
28392    `I'
28393          High 16-bit constant (32-bit constant with 16 LSBs zero).
28394
28395    `J'
28396          Unsigned 5 bit integer (in the range 0 to 31).
28397
28398    `K'
28399          Unsigned 16 bit integer (in the range 0 to 65535).
28400
28401    `L'
28402          Signed 16 bit integer (in the range -32768 to 32767).
28403
28404    `M'
28405          Unsigned 14 bit integer (in the range 0 to 16383).
28406
28407    `N'
28408          Signed 14 bit integer (in the range -8192 to 8191).
28409
28410    `Z'
28411          Any SYMBOL_REF.
28412
28413_Xstormy16--`config/stormy16/stormy16.h'_
28414
28415    `a'
28416          Register r0.
28417
28418    `b'
28419          Register r1.
28420
28421    `c'
28422          Register r2.
28423
28424    `d'
28425          Register r8.
28426
28427    `e'
28428          Registers r0 through r7.
28429
28430    `t'
28431          Registers r0 and r1.
28432
28433    `y'
28434          The carry register.
28435
28436    `z'
28437          Registers r8 and r9.
28438
28439    `I'
28440          A constant between 0 and 3 inclusive.
28441
28442    `J'
28443          A constant that has exactly one bit set.
28444
28445    `K'
28446          A constant that has exactly one bit clear.
28447
28448    `L'
28449          A constant between 0 and 255 inclusive.
28450
28451    `M'
28452          A constant between -255 and 0 inclusive.
28453
28454    `N'
28455          A constant between -3 and 0 inclusive.
28456
28457    `O'
28458          A constant between 1 and 4 inclusive.
28459
28460    `P'
28461          A constant between -4 and -1 inclusive.
28462
28463    `Q'
28464          A memory reference that is a stack push.
28465
28466    `R'
28467          A memory reference that is a stack pop.
28468
28469    `S'
28470          A memory reference that refers to a constant address of known
28471          value.
28472
28473    `T'
28474          The register indicated by Rx (not implemented yet).
28475
28476    `U'
28477          A constant that is not between 2 and 15 inclusive.
28478
28479    `Z'
28480          The constant 0.
28481
28482
28483_TI C6X family--`config/c6x/constraints.md'_
28484
28485    `a'
28486          Register file A (A0-A31).
28487
28488    `b'
28489          Register file B (B0-B31).
28490
28491    `A'
28492          Predicate registers in register file A (A0-A2 on C64X and
28493          higher, A1 and A2 otherwise).
28494
28495    `B'
28496          Predicate registers in register file B (B0-B2).
28497
28498    `C'
28499          A call-used register in register file B (B0-B9, B16-B31).
28500
28501    `Da'
28502          Register file A, excluding predicate registers (A3-A31, plus
28503          A0 if not C64X or higher).
28504
28505    `Db'
28506          Register file B, excluding predicate registers (B3-B31).
28507
28508    `Iu4'
28509          Integer constant in the range 0 ... 15.
28510
28511    `Iu5'
28512          Integer constant in the range 0 ... 31.
28513
28514    `In5'
28515          Integer constant in the range -31 ... 0.
28516
28517    `Is5'
28518          Integer constant in the range -16 ... 15.
28519
28520    `I5x'
28521          Integer constant that can be the operand of an ADDA or a SUBA
28522          insn.
28523
28524    `IuB'
28525          Integer constant in the range 0 ... 65535.
28526
28527    `IsB'
28528          Integer constant in the range -32768 ... 32767.
28529
28530    `IsC'
28531          Integer constant in the range -2^20 ... 2^20 - 1.
28532
28533    `Jc'
28534          Integer constant that is a valid mask for the clr instruction.
28535
28536    `Js'
28537          Integer constant that is a valid mask for the set instruction.
28538
28539    `Q'
28540          Memory location with A base register.
28541
28542    `R'
28543          Memory location with B base register.
28544
28545    `Z'
28546          Register B14 (aka DP).
28547
28548
28549_TILE-Gx--`config/tilegx/constraints.md'_
28550
28551    `R00'
28552    `R01'
28553    `R02'
28554    `R03'
28555    `R04'
28556    `R05'
28557    `R06'
28558    `R07'
28559    `R08'
28560    `R09'
28561    `R10'
28562          Each of these represents a register constraint for an
28563          individual register, from r0 to r10.
28564
28565    `I'
28566          Signed 8-bit integer constant.
28567
28568    `J'
28569          Signed 16-bit integer constant.
28570
28571    `K'
28572          Unsigned 16-bit integer constant.
28573
28574    `L'
28575          Integer constant that fits in one signed byte when
28576          incremented by one (-129 ... 126).
28577
28578    `m'
28579          Memory operand.  If used together with `<' or `>', the
28580          operand can have postincrement which requires printing with
28581          `%In' and `%in' on TILE-Gx.  For example:
28582
28583               asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val));
28584
28585    `M'
28586          A bit mask suitable for the BFINS instruction.
28587
28588    `N'
28589          Integer constant that is a byte tiled out eight times.
28590
28591    `O'
28592          The integer zero constant.
28593
28594    `P'
28595          Integer constant that is a sign-extended byte tiled out as
28596          four shorts.
28597
28598    `Q'
28599          Integer constant that fits in one signed byte when incremented
28600          (-129 ... 126), but excluding -1.
28601
28602    `S'
28603          Integer constant that has all 1 bits consecutive and starting
28604          at bit 0.
28605
28606    `T'
28607          A 16-bit fragment of a got, tls, or pc-relative reference.
28608
28609    `U'
28610          Memory operand except postincrement.  This is roughly the
28611          same as `m' when not used together with `<' or `>'.
28612
28613    `W'
28614          An 8-element vector constant with identical elements.
28615
28616    `Y'
28617          A 4-element vector constant with identical elements.
28618
28619    `Z0'
28620          The integer constant 0xffffffff.
28621
28622    `Z1'
28623          The integer constant 0xffffffff00000000.
28624
28625
28626_TILEPro--`config/tilepro/constraints.md'_
28627
28628    `R00'
28629    `R01'
28630    `R02'
28631    `R03'
28632    `R04'
28633    `R05'
28634    `R06'
28635    `R07'
28636    `R08'
28637    `R09'
28638    `R10'
28639          Each of these represents a register constraint for an
28640          individual register, from r0 to r10.
28641
28642    `I'
28643          Signed 8-bit integer constant.
28644
28645    `J'
28646          Signed 16-bit integer constant.
28647
28648    `K'
28649          Nonzero integer constant with low 16 bits zero.
28650
28651    `L'
28652          Integer constant that fits in one signed byte when
28653          incremented by one (-129 ... 126).
28654
28655    `m'
28656          Memory operand.  If used together with `<' or `>', the
28657          operand can have postincrement which requires printing with
28658          `%In' and `%in' on TILEPro.  For example:
28659
28660               asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val));
28661
28662    `M'
28663          A bit mask suitable for the MM instruction.
28664
28665    `N'
28666          Integer constant that is a byte tiled out four times.
28667
28668    `O'
28669          The integer zero constant.
28670
28671    `P'
28672          Integer constant that is a sign-extended byte tiled out as
28673          two shorts.
28674
28675    `Q'
28676          Integer constant that fits in one signed byte when incremented
28677          (-129 ... 126), but excluding -1.
28678
28679    `T'
28680          A symbolic operand, or a 16-bit fragment of a got, tls, or
28681          pc-relative reference.
28682
28683    `U'
28684          Memory operand except postincrement.  This is roughly the
28685          same as `m' when not used together with `<' or `>'.
28686
28687    `W'
28688          A 4-element vector constant with identical elements.
28689
28690    `Y'
28691          A 2-element vector constant with identical elements.
28692
28693
28694_Xtensa--`config/xtensa/constraints.md'_
28695
28696    `a'
28697          General-purpose 32-bit register
28698
28699    `b'
28700          One-bit boolean register
28701
28702    `A'
28703          MAC16 40-bit accumulator register
28704
28705    `I'
28706          Signed 12-bit integer constant, for use in MOVI instructions
28707
28708    `J'
28709          Signed 8-bit integer constant, for use in ADDI instructions
28710
28711    `K'
28712          Integer constant valid for BccI instructions
28713
28714    `L'
28715          Unsigned constant valid for BccUI instructions
28716
28717
28718
28719
28720File: gcc.info,  Node: Asm Labels,  Next: Explicit Reg Vars,  Prev: Constraints,  Up: C Extensions
28721
287226.43 Controlling Names Used in Assembler Code
28723=============================================
28724
28725You can specify the name to be used in the assembler code for a C
28726function or variable by writing the `asm' (or `__asm__') keyword after
28727the declarator as follows:
28728
28729     int foo asm ("myfoo") = 2;
28730
28731This specifies that the name to be used for the variable `foo' in the
28732assembler code should be `myfoo' rather than the usual `_foo'.
28733
28734 On systems where an underscore is normally prepended to the name of a C
28735function or variable, this feature allows you to define names for the
28736linker that do not start with an underscore.
28737
28738 It does not make sense to use this feature with a non-static local
28739variable since such variables do not have assembler names.  If you are
28740trying to put the variable in a particular register, see *note Explicit
28741Reg Vars::.  GCC presently accepts such code with a warning, but will
28742probably be changed to issue an error, rather than a warning, in the
28743future.
28744
28745 You cannot use `asm' in this way in a function _definition_; but you
28746can get the same effect by writing a declaration for the function
28747before its definition and putting `asm' there, like this:
28748
28749     extern func () asm ("FUNC");
28750
28751     func (x, y)
28752          int x, y;
28753     /* ... */
28754
28755 It is up to you to make sure that the assembler names you choose do not
28756conflict with any other assembler symbols.  Also, you must not use a
28757register name; that would produce completely invalid assembler code.
28758GCC does not as yet have the ability to store static variables in
28759registers.  Perhaps that will be added.
28760
28761
28762File: gcc.info,  Node: Explicit Reg Vars,  Next: Alternate Keywords,  Prev: Asm Labels,  Up: C Extensions
28763
287646.44 Variables in Specified Registers
28765=====================================
28766
28767GNU C allows you to put a few global variables into specified hardware
28768registers.  You can also specify the register in which an ordinary
28769register variable should be allocated.
28770
28771   * Global register variables reserve registers throughout the program.
28772     This may be useful in programs such as programming language
28773     interpreters that have a couple of global variables that are
28774     accessed very often.
28775
28776   * Local register variables in specific registers do not reserve the
28777     registers, except at the point where they are used as input or
28778     output operands in an `asm' statement and the `asm' statement
28779     itself is not deleted.  The compiler's data flow analysis is
28780     capable of determining where the specified registers contain live
28781     values, and where they are available for other uses.  Stores into
28782     local register variables may be deleted when they appear to be
28783     dead according to dataflow analysis.  References to local register
28784     variables may be deleted or moved or simplified.
28785
28786     These local variables are sometimes convenient for use with the
28787     extended `asm' feature (*note Extended Asm::), if you want to
28788     write one output of the assembler instruction directly into a
28789     particular register.  (This works provided the register you
28790     specify fits the constraints specified for that operand in the
28791     `asm'.)
28792
28793* Menu:
28794
28795* Global Reg Vars::
28796* Local Reg Vars::
28797
28798
28799File: gcc.info,  Node: Global Reg Vars,  Next: Local Reg Vars,  Up: Explicit Reg Vars
28800
288016.44.1 Defining Global Register Variables
28802-----------------------------------------
28803
28804You can define a global register variable in GNU C like this:
28805
28806     register int *foo asm ("a5");
28807
28808Here `a5' is the name of the register that should be used.  Choose a
28809register that is normally saved and restored by function calls on your
28810machine, so that library routines will not clobber it.
28811
28812 Naturally the register name is cpu-dependent, so you need to
28813conditionalize your program according to cpu type.  The register `a5'
28814is a good choice on a 68000 for a variable of pointer type.  On
28815machines with register windows, be sure to choose a "global" register
28816that is not affected magically by the function call mechanism.
28817
28818 In addition, different operating systems on the same CPU may differ in
28819how they name the registers; then you need additional conditionals.  For
28820example, some 68000 operating systems call this register `%a5'.
28821
28822 Eventually there may be a way of asking the compiler to choose a
28823register automatically, but first we need to figure out how it should
28824choose and how to enable you to guide the choice.  No solution is
28825evident.
28826
28827 Defining a global register variable in a certain register reserves that
28828register entirely for this use, at least within the current compilation.
28829The register is not allocated for any other purpose in the functions in
28830the current compilation, and is not saved and restored by these
28831functions.  Stores into this register are never deleted even if they
28832appear to be dead, but references may be deleted or moved or simplified.
28833
28834 It is not safe to access the global register variables from signal
28835handlers, or from more than one thread of control, because the system
28836library routines may temporarily use the register for other things
28837(unless you recompile them specially for the task at hand).
28838
28839 It is not safe for one function that uses a global register variable to
28840call another such function `foo' by way of a third function `lose' that
28841is compiled without knowledge of this variable (i.e. in a different
28842source file in which the variable isn't declared).  This is because
28843`lose' might save the register and put some other value there.  For
28844example, you can't expect a global register variable to be available in
28845the comparison-function that you pass to `qsort', since `qsort' might
28846have put something else in that register.  (If you are prepared to
28847recompile `qsort' with the same global register variable, you can solve
28848this problem.)
28849
28850 If you want to recompile `qsort' or other source files that do not
28851actually use your global register variable, so that they do not use that
28852register for any other purpose, then it suffices to specify the compiler
28853option `-ffixed-REG'.  You need not actually add a global register
28854declaration to their source code.
28855
28856 A function that can alter the value of a global register variable
28857cannot safely be called from a function compiled without this variable,
28858because it could clobber the value the caller expects to find there on
28859return.  Therefore, the function that is the entry point into the part
28860of the program that uses the global register variable must explicitly
28861save and restore the value that belongs to its caller.
28862
28863 On most machines, `longjmp' restores to each global register variable
28864the value it had at the time of the `setjmp'.  On some machines,
28865however, `longjmp' does not change the value of global register
28866variables.  To be portable, the function that called `setjmp' should
28867make other arrangements to save the values of the global register
28868variables, and to restore them in a `longjmp'.  This way, the same
28869thing happens regardless of what `longjmp' does.
28870
28871 All global register variable declarations must precede all function
28872definitions.  If such a declaration could appear after function
28873definitions, the declaration would be too late to prevent the register
28874from being used for other purposes in the preceding functions.
28875
28876 Global register variables may not have initial values, because an
28877executable file has no means to supply initial contents for a register.
28878
28879 On the SPARC, there are reports that g3 ... g7 are suitable registers,
28880but certain library functions, such as `getwd', as well as the
28881subroutines for division and remainder, modify g3 and g4.  g1 and g2
28882are local temporaries.
28883
28884 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7.  Of
28885course, it does not do to use more than a few of those.
28886
28887
28888File: gcc.info,  Node: Local Reg Vars,  Prev: Global Reg Vars,  Up: Explicit Reg Vars
28889
288906.44.2 Specifying Registers for Local Variables
28891-----------------------------------------------
28892
28893You can define a local register variable with a specified register like
28894this:
28895
28896     register int *foo asm ("a5");
28897
28898Here `a5' is the name of the register that should be used.  Note that
28899this is the same syntax used for defining global register variables,
28900but for a local variable it appears within a function.
28901
28902 Naturally the register name is cpu-dependent, but this is not a
28903problem, since specific registers are most often useful with explicit
28904assembler instructions (*note Extended Asm::).  Both of these things
28905generally require that you conditionalize your program according to cpu
28906type.
28907
28908 In addition, operating systems on one type of cpu may differ in how
28909they name the registers; then you need additional conditionals.  For
28910example, some 68000 operating systems call this register `%a5'.
28911
28912 Defining such a register variable does not reserve the register; it
28913remains available for other uses in places where flow control determines
28914the variable's value is not live.
28915
28916 This option does not guarantee that GCC generates code that has this
28917variable in the register you specify at all times.  You may not code an
28918explicit reference to this register in the _assembler instruction
28919template_ part of an `asm' statement and assume it always refers to
28920this variable.  However, using the variable as an `asm' _operand_
28921guarantees that the specified register is used for the operand.
28922
28923 Stores into local register variables may be deleted when they appear
28924to be dead according to dataflow analysis.  References to local
28925register variables may be deleted or moved or simplified.
28926
28927 As for global register variables, it's recommended that you choose a
28928register that is normally saved and restored by function calls on your
28929machine, so that library routines will not clobber it.  A common
28930pitfall is to initialize multiple call-clobbered registers with
28931arbitrary expressions, where a function call or library call for an
28932arithmetic operator overwrites a register value from a previous
28933assignment, for example `r0' below:
28934     register int *p1 asm ("r0") = ...;
28935     register int *p2 asm ("r1") = ...;
28936
28937In those cases, a solution is to use a temporary variable for each
28938arbitrary expression.   *Note Example of asm with clobbered asm reg::.
28939
28940
28941File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Explicit Reg Vars,  Up: C Extensions
28942
289436.45 Alternate Keywords
28944=======================
28945
28946`-ansi' and the various `-std' options disable certain keywords.  This
28947causes trouble when you want to use GNU C extensions, or a
28948general-purpose header file that should be usable by all programs,
28949including ISO C programs.  The keywords `asm', `typeof' and `inline'
28950are not available in programs compiled with `-ansi' or `-std' (although
28951`inline' can be used in a program compiled with `-std=c99' or
28952`-std=c11').  The ISO C99 keyword `restrict' is only available when
28953`-std=gnu99' (which will eventually be the default) or `-std=c99' (or
28954the equivalent `-std=iso9899:1999'), or an option for a later standard
28955version, is used.
28956
28957 The way to solve these problems is to put `__' at the beginning and
28958end of each problematical keyword.  For example, use `__asm__' instead
28959of `asm', and `__inline__' instead of `inline'.
28960
28961 Other C compilers won't accept these alternative keywords; if you want
28962to compile with another compiler, you can define the alternate keywords
28963as macros to replace them with the customary keywords.  It looks like
28964this:
28965
28966     #ifndef __GNUC__
28967     #define __asm__ asm
28968     #endif
28969
28970 `-pedantic' and other options cause warnings for many GNU C extensions.
28971You can prevent such warnings within one expression by writing
28972`__extension__' before the expression.  `__extension__' has no effect
28973aside from this.
28974
28975
28976File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
28977
289786.46 Incomplete `enum' Types
28979============================
28980
28981You can define an `enum' tag without specifying its possible values.
28982This results in an incomplete type, much like what you get if you write
28983`struct foo' without describing the elements.  A later declaration that
28984does specify the possible values completes the type.
28985
28986 You can't allocate variables or storage using the type while it is
28987incomplete.  However, you can work with pointers to that type.
28988
28989 This extension may not be very useful, but it makes the handling of
28990`enum' more consistent with the way `struct' and `union' are handled.
28991
28992 This extension is not supported by GNU C++.
28993
28994
28995File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions
28996
289976.47 Function Names as Strings
28998==============================
28999
29000GCC provides three magic variables that hold the name of the current
29001function, as a string.  The first of these is `__func__', which is part
29002of the C99 standard:
29003
29004 The identifier `__func__' is implicitly declared by the translator as
29005if, immediately following the opening brace of each function
29006definition, the declaration
29007
29008     static const char __func__[] = "function-name";
29009
29010appeared, where function-name is the name of the lexically-enclosing
29011function.  This name is the unadorned name of the function.
29012
29013 `__FUNCTION__' is another name for `__func__'.  Older versions of GCC
29014recognize only this name.  However, it is not standardized.  For
29015maximum portability, we recommend you use `__func__', but provide a
29016fallback definition with the preprocessor:
29017
29018     #if __STDC_VERSION__ < 199901L
29019     # if __GNUC__ >= 2
29020     #  define __func__ __FUNCTION__
29021     # else
29022     #  define __func__ "<unknown>"
29023     # endif
29024     #endif
29025
29026 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'.
29027However, in C++, `__PRETTY_FUNCTION__' contains the type signature of
29028the function as well as its bare name.  For example, this program:
29029
29030     extern "C" {
29031     extern int printf (char *, ...);
29032     }
29033
29034     class a {
29035      public:
29036       void sub (int i)
29037         {
29038           printf ("__FUNCTION__ = %s\n", __FUNCTION__);
29039           printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
29040         }
29041     };
29042
29043     int
29044     main (void)
29045     {
29046       a ax;
29047       ax.sub (0);
29048       return 0;
29049     }
29050
29051gives this output:
29052
29053     __FUNCTION__ = sub
29054     __PRETTY_FUNCTION__ = void a::sub(int)
29055
29056 These identifiers are not preprocessor macros.  In GCC 3.3 and
29057earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were
29058treated as string literals; they could be used to initialize `char'
29059arrays, and they could be concatenated with other string literals.  GCC
290603.4 and later treat them as variables, like `__func__'.  In C++,
29061`__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables.
29062
29063
29064File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions
29065
290666.48 Getting the Return or Frame Address of a Function
29067======================================================
29068
29069These functions may be used to get information about the callers of a
29070function.
29071
29072 -- Built-in Function: void * __builtin_return_address (unsigned int
29073          LEVEL)
29074     This function returns the return address of the current function,
29075     or of one of its callers.  The LEVEL argument is number of frames
29076     to scan up the call stack.  A value of `0' yields the return
29077     address of the current function, a value of `1' yields the return
29078     address of the caller of the current function, and so forth.  When
29079     inlining the expected behavior is that the function returns the
29080     address of the function that is returned to.  To work around this
29081     behavior use the `noinline' function attribute.
29082
29083     The LEVEL argument must be a constant integer.
29084
29085     On some machines it may be impossible to determine the return
29086     address of any function other than the current one; in such cases,
29087     or when the top of the stack has been reached, this function
29088     returns `0' or a random value.  In addition,
29089     `__builtin_frame_address' may be used to determine if the top of
29090     the stack has been reached.
29091
29092     Additional post-processing of the returned value may be needed, see
29093     `__builtin_extract_return_addr'.
29094
29095     This function should only be used with a nonzero argument for
29096     debugging purposes.
29097
29098 -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR)
29099     The address as returned by `__builtin_return_address' may have to
29100     be fed through this function to get the actual encoded address.
29101     For example, on the 31-bit S/390 platform the highest bit has to
29102     be masked out, or on SPARC platforms an offset has to be added for
29103     the true next instruction to be executed.
29104
29105     If no fixup is needed, this function simply passes through ADDR.
29106
29107 -- Built-in Function: void * __builtin_frob_return_address (void *ADDR)
29108     This function does the reverse of `__builtin_extract_return_addr'.
29109
29110 -- Built-in Function: void * __builtin_frame_address (unsigned int
29111          LEVEL)
29112     This function is similar to `__builtin_return_address', but it
29113     returns the address of the function frame rather than the return
29114     address of the function.  Calling `__builtin_frame_address' with a
29115     value of `0' yields the frame address of the current function, a
29116     value of `1' yields the frame address of the caller of the current
29117     function, and so forth.
29118
29119     The frame is the area on the stack that holds local variables and
29120     saved registers.  The frame address is normally the address of the
29121     first word pushed on to the stack by the function.  However, the
29122     exact definition depends upon the processor and the calling
29123     convention.  If the processor has a dedicated frame pointer
29124     register, and the function has a frame, then
29125     `__builtin_frame_address' returns the value of the frame pointer
29126     register.
29127
29128     On some machines it may be impossible to determine the frame
29129     address of any function other than the current one; in such cases,
29130     or when the top of the stack has been reached, this function
29131     returns `0' if the first frame pointer is properly initialized by
29132     the startup code.
29133
29134     This function should only be used with a nonzero argument for
29135     debugging purposes.
29136
29137
29138File: gcc.info,  Node: Vector Extensions,  Next: Offsetof,  Prev: Return Address,  Up: C Extensions
29139
291406.49 Using Vector Instructions through Built-in Functions
29141=========================================================
29142
29143On some targets, the instruction set contains SIMD vector instructions
29144which operate on multiple values contained in one large register at the
29145same time.  For example, on the i386 the MMX, 3DNow! and SSE extensions
29146can be used this way.
29147
29148 The first step in using these extensions is to provide the necessary
29149data types.  This should be done using an appropriate `typedef':
29150
29151     typedef int v4si __attribute__ ((vector_size (16)));
29152
29153The `int' type specifies the base type, while the attribute specifies
29154the vector size for the variable, measured in bytes.  For example, the
29155declaration above causes the compiler to set the mode for the `v4si'
29156type to be 16 bytes wide and divided into `int' sized units.  For a
2915732-bit `int' this means a vector of 4 units of 4 bytes, and the
29158corresponding mode of `foo' is V4SI.
29159
29160 The `vector_size' attribute is only applicable to integral and float
29161scalars, although arrays, pointers, and function return values are
29162allowed in conjunction with this construct. Only sizes that are a power
29163of two are currently allowed.
29164
29165 All the basic integer types can be used as base types, both as signed
29166and as unsigned: `char', `short', `int', `long', `long long'.  In
29167addition, `float' and `double' can be used to build floating-point
29168vector types.
29169
29170 Specifying a combination that is not valid for the current architecture
29171causes GCC to synthesize the instructions using a narrower mode.  For
29172example, if you specify a variable of type `V4SI' and your architecture
29173does not allow for this specific SIMD type, GCC produces code that uses
291744 `SIs'.
29175
29176 The types defined in this manner can be used with a subset of normal C
29177operations.  Currently, GCC allows using the following operators on
29178these types: `+, -, *, /, unary minus, ^, |, &, ~, %'.
29179
29180 The operations behave like C++ `valarrays'.  Addition is defined as
29181the addition of the corresponding elements of the operands.  For
29182example, in the code below, each of the 4 elements in A is added to the
29183corresponding 4 elements in B and the resulting vector is stored in C.
29184
29185     typedef int v4si __attribute__ ((vector_size (16)));
29186
29187     v4si a, b, c;
29188
29189     c = a + b;
29190
29191 Subtraction, multiplication, division, and the logical operations
29192operate in a similar manner.  Likewise, the result of using the unary
29193minus or complement operators on a vector type is a vector whose
29194elements are the negative or complemented values of the corresponding
29195elements in the operand.
29196
29197 It is possible to use shifting operators `<<', `>>' on integer-type
29198vectors. The operation is defined as following: `{a0, a1, ..., an} >>
29199{b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'. Vector
29200operands must have the same number of elements.
29201
29202 For convenience, it is allowed to use a binary vector operation where
29203one operand is a scalar. In that case the compiler transforms the
29204scalar operand into a vector where each element is the scalar from the
29205operation. The transformation happens only if the scalar could be
29206safely converted to the vector-element type.  Consider the following
29207code.
29208
29209     typedef int v4si __attribute__ ((vector_size (16)));
29210
29211     v4si a, b, c;
29212     long l;
29213
29214     a = b + 1;    /* a = b + {1,1,1,1}; */
29215     a = 2 * b;    /* a = {2,2,2,2} * b; */
29216
29217     a = l + a;    /* Error, cannot convert long to int. */
29218
29219 Vectors can be subscripted as if the vector were an array with the
29220same number of elements and base type.  Out of bound accesses invoke
29221undefined behavior at run time.  Warnings for out of bound accesses for
29222vector subscription can be enabled with `-Warray-bounds'.
29223
29224 Vector comparison is supported with standard comparison operators:
29225`==, !=, <, <=, >, >='. Comparison operands can be vector expressions
29226of integer-type or real-type. Comparison between integer-type vectors
29227and real-type vectors are not supported.  The result of the comparison
29228is a vector of the same width and number of elements as the comparison
29229operands with a signed integral element type.
29230
29231 Vectors are compared element-wise producing 0 when comparison is false
29232and -1 (constant of the appropriate type where all bits are set)
29233otherwise. Consider the following example.
29234
29235     typedef int v4si __attribute__ ((vector_size (16)));
29236
29237     v4si a = {1,2,3,4};
29238     v4si b = {3,2,1,4};
29239     v4si c;
29240
29241     c = a >  b;     /* The result would be {0, 0,-1, 0}  */
29242     c = a == b;     /* The result would be {0,-1, 0,-1}  */
29243
29244 Vector shuffling is available using functions `__builtin_shuffle (vec,
29245mask)' and `__builtin_shuffle (vec0, vec1, mask)'.  Both functions
29246construct a permutation of elements from one or two vectors and return
29247a vector of the same type as the input vector(s).  The MASK is an
29248integral vector with the same width (W) and element count (N) as the
29249output vector.
29250
29251 The elements of the input vectors are numbered in memory ordering of
29252VEC0 beginning at 0 and VEC1 beginning at N.  The elements of MASK are
29253considered modulo N in the single-operand case and modulo 2*N in the
29254two-operand case.
29255
29256 Consider the following example,
29257
29258     typedef int v4si __attribute__ ((vector_size (16)));
29259
29260     v4si a = {1,2,3,4};
29261     v4si b = {5,6,7,8};
29262     v4si mask1 = {0,1,1,3};
29263     v4si mask2 = {0,4,2,5};
29264     v4si res;
29265
29266     res = __builtin_shuffle (a, mask1);       /* res is {1,2,2,4}  */
29267     res = __builtin_shuffle (a, b, mask2);    /* res is {1,5,3,6}  */
29268
29269 Note that `__builtin_shuffle' is intentionally semantically compatible
29270with the OpenCL `shuffle' and `shuffle2' functions.
29271
29272 You can declare variables and use them in function calls and returns,
29273as well as in assignments and some casts.  You can specify a vector
29274type as a return type for a function.  Vector types can also be used as
29275function arguments.  It is possible to cast from one vector type to
29276another, provided they are of the same size (in fact, you can also cast
29277vectors to and from other datatypes of the same size).
29278
29279 You cannot operate between vectors of different lengths or different
29280signedness without a cast.
29281
29282
29283File: gcc.info,  Node: Offsetof,  Next: __sync Builtins,  Prev: Vector Extensions,  Up: C Extensions
29284
292856.50 Offsetof
29286=============
29287
29288GCC implements for both C and C++ a syntactic extension to implement
29289the `offsetof' macro.
29290
29291     primary:
29292             "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")"
29293
29294     offsetof_member_designator:
29295               `identifier'
29296             | offsetof_member_designator "." `identifier'
29297             | offsetof_member_designator "[" `expr' "]"
29298
29299 This extension is sufficient such that
29300
29301     #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
29302
29303is a suitable definition of the `offsetof' macro.  In C++, TYPE may be
29304dependent.  In either case, MEMBER may consist of a single identifier,
29305or a sequence of member accesses and array references.
29306
29307
29308File: gcc.info,  Node: __sync Builtins,  Next: __atomic Builtins,  Prev: Offsetof,  Up: C Extensions
29309
293106.51 Legacy __sync Built-in Functions for Atomic Memory Access
29311==============================================================
29312
29313The following built-in functions are intended to be compatible with
29314those described in the `Intel Itanium Processor-specific Application
29315Binary Interface', section 7.4.  As such, they depart from the normal
29316GCC practice of using the `__builtin_' prefix, and further that they
29317are overloaded such that they work on multiple types.
29318
29319 The definition given in the Intel documentation allows only for the
29320use of the types `int', `long', `long long' as well as their unsigned
29321counterparts.  GCC allows any integral scalar or pointer type that is
293221, 2, 4 or 8 bytes in length.
29323
29324 Not all operations are supported by all target processors.  If a
29325particular operation cannot be implemented on the target processor, a
29326warning is generated and a call an external function is generated.  The
29327external function carries the same name as the built-in version, with
29328an additional suffix `_N' where N is the size of the data type.
29329
29330 In most cases, these built-in functions are considered a "full
29331barrier".  That is, no memory operand is moved across the operation,
29332either forward or backward.  Further, instructions are issued as
29333necessary to prevent the processor from speculating loads across the
29334operation and from queuing stores after the operation.
29335
29336 All of the routines are described in the Intel documentation to take
29337"an optional list of variables protected by the memory barrier".  It's
29338not clear what is meant by that; it could mean that _only_ the
29339following variables are protected, or it could mean that these variables
29340should in addition be protected.  At present GCC ignores this list and
29341protects all variables that are globally accessible.  If in the future
29342we make some use of this list, an empty list will continue to mean all
29343globally accessible variables.
29344
29345`TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)'
29346`TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)'
29347`TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)'
29348`TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)'
29349`TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)'
29350`TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)'
29351     These built-in functions perform the operation suggested by the
29352     name, and returns the value that had previously been in memory.
29353     That is,
29354
29355          { tmp = *ptr; *ptr OP= value; return tmp; }
29356          { tmp = *ptr; *ptr = ~(tmp & value); return tmp; }   // nand
29357
29358     _Note:_ GCC 4.4 and later implement `__sync_fetch_and_nand' as
29359     `*ptr = ~(tmp & value)' instead of `*ptr = ~tmp & value'.
29360
29361`TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)'
29362`TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)'
29363`TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)'
29364`TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)'
29365`TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)'
29366`TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)'
29367     These built-in functions perform the operation suggested by the
29368     name, and return the new value.  That is,
29369
29370          { *ptr OP= value; return *ptr; }
29371          { *ptr = ~(*ptr & value); return *ptr; }   // nand
29372
29373     _Note:_ GCC 4.4 and later implement `__sync_nand_and_fetch' as
29374     `*ptr = ~(*ptr & value)' instead of `*ptr = ~*ptr & value'.
29375
29376`bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
29377`TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
29378     These built-in functions perform an atomic compare and swap.  That
29379     is, if the current value of `*PTR' is OLDVAL, then write NEWVAL
29380     into `*PTR'.
29381
29382     The "bool" version returns true if the comparison is successful and
29383     NEWVAL is written.  The "val" version returns the contents of
29384     `*PTR' before the operation.
29385
29386`__sync_synchronize (...)'
29387     This built-in function issues a full memory barrier.
29388
29389`TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
29390     This built-in function, as described by Intel, is not a
29391     traditional test-and-set operation, but rather an atomic exchange
29392     operation.  It writes VALUE into `*PTR', and returns the previous
29393     contents of `*PTR'.
29394
29395     Many targets have only minimal support for such locks, and do not
29396     support a full exchange operation.  In this case, a target may
29397     support reduced functionality here by which the _only_ valid value
29398     to store is the immediate constant 1.  The exact value actually
29399     stored in `*PTR' is implementation defined.
29400
29401     This built-in function is not a full barrier, but rather an
29402     "acquire barrier".  This means that references after the operation
29403     cannot move to (or be speculated to) before the operation, but
29404     previous memory stores may not be globally visible yet, and
29405     previous memory loads may not yet be satisfied.
29406
29407`void __sync_lock_release (TYPE *ptr, ...)'
29408     This built-in function releases the lock acquired by
29409     `__sync_lock_test_and_set'.  Normally this means writing the
29410     constant 0 to `*PTR'.
29411
29412     This built-in function is not a full barrier, but rather a
29413     "release barrier".  This means that all previous memory stores are
29414     globally visible, and all previous memory loads have been
29415     satisfied, but following memory reads are not prevented from being
29416     speculated to before the barrier.
29417
29418
29419File: gcc.info,  Node: __atomic Builtins,  Next: x86 specific memory model extensions for transactional memory,  Prev: __sync Builtins,  Up: C Extensions
29420
294216.52 Built-in functions for memory model aware atomic operations
29422================================================================
29423
29424The following built-in functions approximately match the requirements
29425for C++11 memory model. Many are similar to the `__sync' prefixed
29426built-in functions, but all also have a memory model parameter.  These
29427are all identified by being prefixed with `__atomic', and most are
29428overloaded such that they work with multiple types.
29429
29430 GCC allows any integral scalar or pointer type that is 1, 2, 4, or 8
29431bytes in length. 16-byte integral types are also allowed if `__int128'
29432(*note __int128::) is supported by the architecture.
29433
29434 Target architectures are encouraged to provide their own patterns for
29435each of these built-in functions.  If no target is provided, the
29436original non-memory model set of `__sync' atomic built-in functions are
29437utilized, along with any required synchronization fences surrounding it
29438in order to achieve the proper behavior.  Execution in this case is
29439subject to the same restrictions as those built-in functions.
29440
29441 If there is no pattern or mechanism to provide a lock free instruction
29442sequence, a call is made to an external routine with the same parameters
29443to be resolved at run time.
29444
29445 The four non-arithmetic functions (load, store, exchange, and
29446compare_exchange) all have a generic version as well.  This generic
29447version works on any data type.  If the data type size maps to one of
29448the integral sizes that may have lock free support, the generic version
29449utilizes the lock free built-in function.  Otherwise an external call
29450is left to be resolved at run time.  This external call is the same
29451format with the addition of a `size_t' parameter inserted as the first
29452parameter indicating the size of the object being pointed to.  All
29453objects must be the same size.
29454
29455 There are 6 different memory models that can be specified.  These map
29456to the same names in the C++11 standard.  Refer there or to the GCC
29457wiki on atomic synchronization
29458(http://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync) for more detailed
29459definitions.  These memory models integrate both barriers to code
29460motion as well as synchronization requirements with other threads.
29461These are listed in approximately ascending order of strength. It is
29462also possible to use target specific flags for memory model flags, like
29463Hardware Lock Elision.
29464
29465`__ATOMIC_RELAXED'
29466     No barriers or synchronization.
29467
29468`__ATOMIC_CONSUME'
29469     Data dependency only for both barrier and synchronization with
29470     another thread.
29471
29472`__ATOMIC_ACQUIRE'
29473     Barrier to hoisting of code and synchronizes with release (or
29474     stronger) semantic stores from another thread.
29475
29476`__ATOMIC_RELEASE'
29477     Barrier to sinking of code and synchronizes with acquire (or
29478     stronger) semantic loads from another thread.
29479
29480`__ATOMIC_ACQ_REL'
29481     Full barrier in both directions and synchronizes with acquire
29482     loads and release stores in another thread.
29483
29484`__ATOMIC_SEQ_CST'
29485     Full barrier in both directions and synchronizes with acquire
29486     loads and release stores in all threads.
29487
29488 When implementing patterns for these built-in functions, the memory
29489model parameter can be ignored as long as the pattern implements the
29490most restrictive `__ATOMIC_SEQ_CST' model.  Any of the other memory
29491models execute correctly with this memory model but they may not
29492execute as efficiently as they could with a more appropriate
29493implementation of the relaxed requirements.
29494
29495 Note that the C++11 standard allows for the memory model parameter to
29496be determined at run time rather than at compile time.  These built-in
29497functions map any run-time value to `__ATOMIC_SEQ_CST' rather than
29498invoke a runtime library call or inline a switch statement.  This is
29499standard compliant, safe, and the simplest approach for now.
29500
29501 The memory model parameter is a signed int, but only the lower 8 bits
29502are reserved for the memory model.  The remainder of the signed int is
29503reserved for future use and should be 0.  Use of the predefined atomic
29504values ensures proper usage.
29505
29506 -- Built-in Function: TYPE __atomic_load_n (TYPE *ptr, int memmodel)
29507     This built-in function implements an atomic load operation.  It
29508     returns the contents of `*PTR'.
29509
29510     The valid memory model variants are `__ATOMIC_RELAXED',
29511     `__ATOMIC_SEQ_CST', `__ATOMIC_ACQUIRE', and `__ATOMIC_CONSUME'.
29512
29513
29514 -- Built-in Function: void __atomic_load (TYPE *ptr, TYPE *ret, int
29515          memmodel)
29516     This is the generic version of an atomic load.  It returns the
29517     contents of `*PTR' in `*RET'.
29518
29519
29520 -- Built-in Function: void __atomic_store_n (TYPE *ptr, TYPE val, int
29521          memmodel)
29522     This built-in function implements an atomic store operation.  It
29523     writes `VAL' into `*PTR'.
29524
29525     The valid memory model variants are `__ATOMIC_RELAXED',
29526     `__ATOMIC_SEQ_CST', and `__ATOMIC_RELEASE'.
29527
29528
29529 -- Built-in Function: void __atomic_store (TYPE *ptr, TYPE *val, int
29530          memmodel)
29531     This is the generic version of an atomic store.  It stores the
29532     value of `*VAL' into `*PTR'.
29533
29534
29535 -- Built-in Function: TYPE __atomic_exchange_n (TYPE *ptr, TYPE val,
29536          int memmodel)
29537     This built-in function implements an atomic exchange operation.
29538     It writes VAL into `*PTR', and returns the previous contents of
29539     `*PTR'.
29540
29541     The valid memory model variants are `__ATOMIC_RELAXED',
29542     `__ATOMIC_SEQ_CST', `__ATOMIC_ACQUIRE', `__ATOMIC_RELEASE', and
29543     `__ATOMIC_ACQ_REL'.
29544
29545
29546 -- Built-in Function: void __atomic_exchange (TYPE *ptr, TYPE *val,
29547          TYPE *ret, int memmodel)
29548     This is the generic version of an atomic exchange.  It stores the
29549     contents of `*VAL' into `*PTR'. The original value of `*PTR' is
29550     copied into `*RET'.
29551
29552
29553 -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *ptr,
29554          TYPE *expected, TYPE desired, bool weak, int
29555          success_memmodel, int failure_memmodel)
29556     This built-in function implements an atomic compare and exchange
29557     operation.  This compares the contents of `*PTR' with the contents
29558     of `*EXPECTED' and if equal, writes DESIRED into `*PTR'.  If they
29559     are not equal, the current contents of `*PTR' is written into
29560     `*EXPECTED'.  WEAK is true for weak compare_exchange, and false
29561     for the strong variation.  Many targets only offer the strong
29562     variation and ignore the parameter.  When in doubt, use the strong
29563     variation.
29564
29565     True is returned if DESIRED is written into `*PTR' and the
29566     execution is considered to conform to the memory model specified
29567     by SUCCESS_MEMMODEL.  There are no restrictions on what memory
29568     model can be used here.
29569
29570     False is returned otherwise, and the execution is considered to
29571     conform to FAILURE_MEMMODEL. This memory model cannot be
29572     `__ATOMIC_RELEASE' nor `__ATOMIC_ACQ_REL'.  It also cannot be a
29573     stronger model than that specified by SUCCESS_MEMMODEL.
29574
29575
29576 -- Built-in Function: bool __atomic_compare_exchange (TYPE *ptr, TYPE
29577          *expected, TYPE *desired, bool weak, int success_memmodel,
29578          int failure_memmodel)
29579     This built-in function implements the generic version of
29580     `__atomic_compare_exchange'.  The function is virtually identical
29581     to `__atomic_compare_exchange_n', except the desired value is also
29582     a pointer.
29583
29584
29585 -- Built-in Function: TYPE __atomic_add_fetch (TYPE *ptr, TYPE val,
29586          int memmodel)
29587 -- Built-in Function: TYPE __atomic_sub_fetch (TYPE *ptr, TYPE val,
29588          int memmodel)
29589 -- Built-in Function: TYPE __atomic_and_fetch (TYPE *ptr, TYPE val,
29590          int memmodel)
29591 -- Built-in Function: TYPE __atomic_xor_fetch (TYPE *ptr, TYPE val,
29592          int memmodel)
29593 -- Built-in Function: TYPE __atomic_or_fetch (TYPE *ptr, TYPE val, int
29594          memmodel)
29595 -- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val,
29596          int memmodel)
29597     These built-in functions perform the operation suggested by the
29598     name, and return the result of the operation. That is,
29599
29600          { *ptr OP= val; return *ptr; }
29601
29602     All memory models are valid.
29603
29604
29605 -- Built-in Function: TYPE __atomic_fetch_add (TYPE *ptr, TYPE val,
29606          int memmodel)
29607 -- Built-in Function: TYPE __atomic_fetch_sub (TYPE *ptr, TYPE val,
29608          int memmodel)
29609 -- Built-in Function: TYPE __atomic_fetch_and (TYPE *ptr, TYPE val,
29610          int memmodel)
29611 -- Built-in Function: TYPE __atomic_fetch_xor (TYPE *ptr, TYPE val,
29612          int memmodel)
29613 -- Built-in Function: TYPE __atomic_fetch_or (TYPE *ptr, TYPE val, int
29614          memmodel)
29615 -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *ptr, TYPE val,
29616          int memmodel)
29617     These built-in functions perform the operation suggested by the
29618     name, and return the value that had previously been in `*PTR'.
29619     That is,
29620
29621          { tmp = *ptr; *ptr OP= val; return tmp; }
29622
29623     All memory models are valid.
29624
29625
29626 -- Built-in Function: bool __atomic_test_and_set (void *ptr, int
29627          memmodel)
29628     This built-in function performs an atomic test-and-set operation on
29629     the byte at `*PTR'.  The byte is set to some implementation
29630     defined nonzero "set" value and the return value is `true' if and
29631     only if the previous contents were "set".  It should be only used
29632     for operands of type `bool' or `char'. For other types only part
29633     of the value may be set.
29634
29635     All memory models are valid.
29636
29637
29638 -- Built-in Function: void __atomic_clear (bool *ptr, int memmodel)
29639     This built-in function performs an atomic clear operation on
29640     `*PTR'.  After the operation, `*PTR' contains 0.  It should be
29641     only used for operands of type `bool' or `char' and in conjunction
29642     with `__atomic_test_and_set'.  For other types it may only clear
29643     partially. If the type is not `bool' prefer using `__atomic_store'.
29644
29645     The valid memory model variants are `__ATOMIC_RELAXED',
29646     `__ATOMIC_SEQ_CST', and `__ATOMIC_RELEASE'.
29647
29648
29649 -- Built-in Function: void __atomic_thread_fence (int memmodel)
29650     This built-in function acts as a synchronization fence between
29651     threads based on the specified memory model.
29652
29653     All memory orders are valid.
29654
29655
29656 -- Built-in Function: void __atomic_signal_fence (int memmodel)
29657     This built-in function acts as a synchronization fence between a
29658     thread and signal handlers based in the same thread.
29659
29660     All memory orders are valid.
29661
29662
29663 -- Built-in Function: bool __atomic_always_lock_free (size_t size,
29664          void *ptr)
29665     This built-in function returns true if objects of SIZE bytes always
29666     generate lock free atomic instructions for the target architecture.
29667     SIZE must resolve to a compile-time constant and the result also
29668     resolves to a compile-time constant.
29669
29670     PTR is an optional pointer to the object that may be used to
29671     determine alignment.  A value of 0 indicates typical alignment
29672     should be used.  The compiler may also ignore this parameter.
29673
29674          if (_atomic_always_lock_free (sizeof (long long), 0))
29675
29676
29677 -- Built-in Function: bool __atomic_is_lock_free (size_t size, void
29678          *ptr)
29679     This built-in function returns true if objects of SIZE bytes always
29680     generate lock free atomic instructions for the target
29681     architecture.  If it is not known to be lock free a call is made
29682     to a runtime routine named `__atomic_is_lock_free'.
29683
29684     PTR is an optional pointer to the object that may be used to
29685     determine alignment.  A value of 0 indicates typical alignment
29686     should be used.  The compiler may also ignore this parameter.
29687
29688
29689File: gcc.info,  Node: x86 specific memory model extensions for transactional memory,  Next: Object Size Checking,  Prev: __atomic Builtins,  Up: C Extensions
29690
296916.53 x86 specific memory model extensions for transactional memory
29692==================================================================
29693
29694The i386 architecture supports additional memory ordering flags to mark
29695lock critical sections for hardware lock elision.  These must be
29696specified in addition to an existing memory model to atomic intrinsics.
29697
29698`__ATOMIC_HLE_ACQUIRE'
29699     Start lock elision on a lock variable.  Memory model must be
29700     `__ATOMIC_ACQUIRE' or stronger.
29701
29702`__ATOMIC_HLE_RELEASE'
29703     End lock elision on a lock variable.  Memory model must be
29704     `__ATOMIC_RELEASE' or stronger.
29705
29706 When a lock acquire fails it is required for good performance to abort
29707the transaction quickly. This can be done with a `_mm_pause'
29708
29709     #include <immintrin.h> // For _mm_pause
29710
29711     int lockvar;
29712
29713     /* Acquire lock with lock elision */
29714     while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE))
29715         _mm_pause(); /* Abort failed transaction */
29716     ...
29717     /* Free lock with lock elision */
29718     __atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE);
29719
29720
29721File: gcc.info,  Node: Object Size Checking,  Next: Other Builtins,  Prev: x86 specific memory model extensions for transactional memory,  Up: C Extensions
29722
297236.54 Object Size Checking Built-in Functions
29724============================================
29725
29726GCC implements a limited buffer overflow protection mechanism that can
29727prevent some buffer overflow attacks.
29728
29729 -- Built-in Function: size_t __builtin_object_size (void * PTR, int
29730          TYPE)
29731     is a built-in construct that returns a constant number of bytes
29732     from PTR to the end of the object PTR pointer points to (if known
29733     at compile time).  `__builtin_object_size' never evaluates its
29734     arguments for side-effects.  If there are any side-effects in
29735     them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0'
29736     for TYPE 2 or 3.  If there are multiple objects PTR can point to
29737     and all of them are known at compile time, the returned number is
29738     the maximum of remaining byte counts in those objects if TYPE & 2
29739     is 0 and minimum if nonzero.  If it is not possible to determine
29740     which objects PTR points to at compile time,
29741     `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or
29742     1 and `(size_t) 0' for TYPE 2 or 3.
29743
29744     TYPE is an integer constant from 0 to 3.  If the least significant
29745     bit is clear, objects are whole variables, if it is set, a closest
29746     surrounding subobject is considered the object a pointer points to.
29747     The second bit determines if maximum or minimum of remaining bytes
29748     is computed.
29749
29750          struct V { char buf1[10]; int b; char buf2[10]; } var;
29751          char *p = &var.buf1[1], *q = &var.b;
29752
29753          /* Here the object p points to is var.  */
29754          assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
29755          /* The subobject p points to is var.buf1.  */
29756          assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
29757          /* The object q points to is var.  */
29758          assert (__builtin_object_size (q, 0)
29759                  == (char *) (&var + 1) - (char *) &var.b);
29760          /* The subobject q points to is var.b.  */
29761          assert (__builtin_object_size (q, 1) == sizeof (var.b));
29762
29763 There are built-in functions added for many common string operation
29764functions, e.g., for `memcpy' `__builtin___memcpy_chk' built-in is
29765provided.  This built-in has an additional last argument, which is the
29766number of bytes remaining in object the DEST argument points to or
29767`(size_t) -1' if the size is not known.
29768
29769 The built-in functions are optimized into the normal string functions
29770like `memcpy' if the last argument is `(size_t) -1' or if it is known
29771at compile time that the destination object will not be overflown.  If
29772the compiler can determine at compile time the object will be always
29773overflown, it issues a warning.
29774
29775 The intended use can be e.g.
29776
29777     #undef memcpy
29778     #define bos0(dest) __builtin_object_size (dest, 0)
29779     #define memcpy(dest, src, n) \
29780       __builtin___memcpy_chk (dest, src, n, bos0 (dest))
29781
29782     char *volatile p;
29783     char buf[10];
29784     /* It is unknown what object p points to, so this is optimized
29785        into plain memcpy - no checking is possible.  */
29786     memcpy (p, "abcde", n);
29787     /* Destination is known and length too.  It is known at compile
29788        time there will be no overflow.  */
29789     memcpy (&buf[5], "abcde", 5);
29790     /* Destination is known, but the length is not known at compile time.
29791        This will result in __memcpy_chk call that can check for overflow
29792        at run time.  */
29793     memcpy (&buf[5], "abcde", n);
29794     /* Destination is known and it is known at compile time there will
29795        be overflow.  There will be a warning and __memcpy_chk call that
29796        will abort the program at run time.  */
29797     memcpy (&buf[6], "abcde", 5);
29798
29799 Such built-in functions are provided for `memcpy', `mempcpy',
29800`memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and
29801`strncat'.
29802
29803 There are also checking built-in functions for formatted output
29804functions.
29805     int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
29806     int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
29807                                   const char *fmt, ...);
29808     int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
29809                                   va_list ap);
29810     int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
29811                                    const char *fmt, va_list ap);
29812
29813 The added FLAG argument is passed unchanged to `__sprintf_chk' etc.
29814functions and can contain implementation specific flags on what
29815additional security measures the checking function might take, such as
29816handling `%n' differently.
29817
29818 The OS argument is the object size S points to, like in the other
29819built-in functions.  There is a small difference in the behavior
29820though, if OS is `(size_t) -1', the built-in functions are optimized
29821into the non-checking functions only if FLAG is 0, otherwise the
29822checking function is called with OS argument set to `(size_t) -1'.
29823
29824 In addition to this, there are checking built-in functions
29825`__builtin___printf_chk', `__builtin___vprintf_chk',
29826`__builtin___fprintf_chk' and `__builtin___vfprintf_chk'.  These have
29827just one additional argument, FLAG, right before format string FMT.  If
29828the compiler is able to optimize them to `fputc' etc. functions, it
29829does, otherwise the checking function is called and the FLAG argument
29830passed to it.
29831
29832
29833File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Object Size Checking,  Up: C Extensions
29834
298356.55 Other Built-in Functions Provided by GCC
29836=============================================
29837
29838GCC provides a large number of built-in functions other than the ones
29839mentioned above.  Some of these are for internal use in the processing
29840of exceptions or variable-length argument lists and are not documented
29841here because they may change from time to time; we do not recommend
29842general use of these functions.
29843
29844 The remaining functions are provided for optimization purposes.
29845
29846 GCC includes built-in versions of many of the functions in the standard
29847C library.  The versions prefixed with `__builtin_' are always treated
29848as having the same meaning as the C library function even if you
29849specify the `-fno-builtin' option.  (*note C Dialect Options::) Many of
29850these functions are only optimized in certain cases; if they are not
29851optimized in a particular case, a call to the library function is
29852emitted.
29853
29854 Outside strict ISO C mode (`-ansi', `-std=c90', `-std=c99' or
29855`-std=c11'), the functions `_exit', `alloca', `bcmp', `bzero',
29856`dcgettext', `dgettext', `dremf', `dreml', `drem', `exp10f', `exp10l',
29857`exp10', `ffsll', `ffsl', `ffs', `fprintf_unlocked', `fputs_unlocked',
29858`gammaf', `gammal', `gamma', `gammaf_r', `gammal_r', `gamma_r',
29859`gettext', `index', `isascii', `j0f', `j0l', `j0', `j1f', `j1l', `j1',
29860`jnf', `jnl', `jn', `lgammaf_r', `lgammal_r', `lgamma_r', `mempcpy',
29861`pow10f', `pow10l', `pow10', `printf_unlocked', `rindex', `scalbf',
29862`scalbl', `scalb', `signbit', `signbitf', `signbitl', `signbitd32',
29863`signbitd64', `signbitd128', `significandf', `significandl',
29864`significand', `sincosf', `sincosl', `sincos', `stpcpy', `stpncpy',
29865`strcasecmp', `strdup', `strfmon', `strncasecmp', `strndup', `toascii',
29866`y0f', `y0l', `y0', `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be
29867handled as built-in functions.  All these functions have corresponding
29868versions prefixed with `__builtin_', which may be used even in strict
29869C90 mode.
29870
29871 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf',
29872`asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl',
29873`cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos',
29874`cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh',
29875`casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl',
29876`catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl',
29877`ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl',
29878`cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj',
29879`copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow',
29880`cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf',
29881`csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl',
29882`csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan',
29883`erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l',
29884`exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf',
29885`fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin',
29886`hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs',
29887`isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs',
29888`llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround',
29889`log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf',
29890`logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl',
29891`lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf',
29892`nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward',
29893`remainderf', `remainderl', `remainder', `remquof', `remquol',
29894`remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round',
29895`scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn',
29896`snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc',
29897`vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in
29898functions except in strict ISO C90 mode (`-ansi' or `-std=c90').
29899
29900 There are also built-in versions of the ISO C99 functions `acosf',
29901`acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl',
29902`ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl',
29903`fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf',
29904`frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl',
29905`modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl',
29906`sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are
29907recognized in any mode since ISO C90 reserves these names for the
29908purpose to which ISO C99 puts them.  All these functions have
29909corresponding versions prefixed with `__builtin_'.
29910
29911 The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit',
29912`iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper',
29913`iswxdigit', `towlower' and `towupper' are handled as built-in functions
29914except in strict ISO C90 mode (`-ansi' or `-std=c90').
29915
29916 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan',
29917`calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod',
29918`fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl',
29919`isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace',
29920`isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10',
29921`log', `malloc', `memchr', `memcmp', `memcpy', `memset', `modf', `pow',
29922`printf', `putchar', `puts', `scanf', `sinh', `sin', `snprintf',
29923`sprintf', `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy',
29924`strcspn', `strlen', `strncat', `strncmp', `strncpy', `strpbrk',
29925`strrchr', `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and
29926`vsprintf' are all recognized as built-in functions unless
29927`-fno-builtin' is specified (or `-fno-builtin-FUNCTION' is specified
29928for an individual function).  All of these functions have corresponding
29929versions prefixed with `__builtin_'.
29930
29931 GCC provides built-in versions of the ISO C99 floating-point comparison
29932macros that avoid raising exceptions for unordered operands.  They have
29933the same names as the standard macros ( `isgreater', `isgreaterequal',
29934`isless', `islessequal', `islessgreater', and `isunordered') , with
29935`__builtin_' prefixed.  We intend for a library implementor to be able
29936to simply `#define' each standard macro to its built-in equivalent.  In
29937the same fashion, GCC provides `fpclassify', `isfinite', `isinf_sign'
29938and `isnormal' built-ins used with `__builtin_' prefixed.  The `isinf'
29939and `isnan' built-in functions appear both with and without the
29940`__builtin_' prefix.
29941
29942 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
29943     You can use the built-in function `__builtin_types_compatible_p' to
29944     determine whether two types are the same.
29945
29946     This built-in function returns 1 if the unqualified versions of the
29947     types TYPE1 and TYPE2 (which are types, not expressions) are
29948     compatible, 0 otherwise.  The result of this built-in function can
29949     be used in integer constant expressions.
29950
29951     This built-in function ignores top level qualifiers (e.g., `const',
29952     `volatile').  For example, `int' is equivalent to `const int'.
29953
29954     The type `int[]' and `int[5]' are compatible.  On the other hand,
29955     `int' and `char *' are not compatible, even if the size of their
29956     types, on the particular architecture are the same.  Also, the
29957     amount of pointer indirection is taken into account when
29958     determining similarity.  Consequently, `short *' is not similar to
29959     `short **'.  Furthermore, two types that are typedefed are
29960     considered compatible if their underlying types are compatible.
29961
29962     An `enum' type is not considered to be compatible with another
29963     `enum' type even if both are compatible with the same integer
29964     type; this is what the C standard specifies.  For example, `enum
29965     {foo, bar}' is not similar to `enum {hot, dog}'.
29966
29967     You typically use this function in code whose execution varies
29968     depending on the arguments' types.  For example:
29969
29970          #define foo(x)                                                  \
29971            ({                                                           \
29972              typeof (x) tmp = (x);                                       \
29973              if (__builtin_types_compatible_p (typeof (x), long double)) \
29974                tmp = foo_long_double (tmp);                              \
29975              else if (__builtin_types_compatible_p (typeof (x), double)) \
29976                tmp = foo_double (tmp);                                   \
29977              else if (__builtin_types_compatible_p (typeof (x), float))  \
29978                tmp = foo_float (tmp);                                    \
29979              else                                                        \
29980                abort ();                                                 \
29981              tmp;                                                        \
29982            })
29983
29984     _Note:_ This construct is only available for C.
29985
29986
29987 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
29988          EXP2)
29989     You can use the built-in function `__builtin_choose_expr' to
29990     evaluate code depending on the value of a constant expression.
29991     This built-in function returns EXP1 if CONST_EXP, which is an
29992     integer constant expression, is nonzero.  Otherwise it returns
29993     EXP2.
29994
29995     This built-in function is analogous to the `? :' operator in C,
29996     except that the expression returned has its type unaltered by
29997     promotion rules.  Also, the built-in function does not evaluate
29998     the expression that is not chosen.  For example, if CONST_EXP
29999     evaluates to true, EXP2 is not evaluated even if it has
30000     side-effects.
30001
30002     This built-in function can return an lvalue if the chosen argument
30003     is an lvalue.
30004
30005     If EXP1 is returned, the return type is the same as EXP1's type.
30006     Similarly, if EXP2 is returned, its return type is the same as
30007     EXP2.
30008
30009     Example:
30010
30011          #define foo(x)                                                    \
30012            __builtin_choose_expr (                                         \
30013              __builtin_types_compatible_p (typeof (x), double),            \
30014              foo_double (x),                                               \
30015              __builtin_choose_expr (                                       \
30016                __builtin_types_compatible_p (typeof (x), float),           \
30017                foo_float (x),                                              \
30018                /* The void expression results in a compile-time error  \
30019                   when assigning the result to something.  */          \
30020                (void)0))
30021
30022     _Note:_ This construct is only available for C.  Furthermore, the
30023     unused expression (EXP1 or EXP2 depending on the value of
30024     CONST_EXP) may still generate syntax errors.  This may change in
30025     future revisions.
30026
30027
30028 -- Built-in Function: TYPE __builtin_complex (REAL, IMAG)
30029     The built-in function `__builtin_complex' is provided for use in
30030     implementing the ISO C11 macros `CMPLXF', `CMPLX' and `CMPLXL'.
30031     REAL and IMAG must have the same type, a real binary
30032     floating-point type, and the result has the corresponding complex
30033     type with real and imaginary parts REAL and IMAG.  Unlike `REAL +
30034     I * IMAG', this works even when infinities, NaNs and negative
30035     zeros are involved.
30036
30037
30038 -- Built-in Function: int __builtin_constant_p (EXP)
30039     You can use the built-in function `__builtin_constant_p' to
30040     determine if a value is known to be constant at compile time and
30041     hence that GCC can perform constant-folding on expressions
30042     involving that value.  The argument of the function is the value
30043     to test.  The function returns the integer 1 if the argument is
30044     known to be a compile-time constant and 0 if it is not known to be
30045     a compile-time constant.  A return of 0 does not indicate that the
30046     value is _not_ a constant, but merely that GCC cannot prove it is
30047     a constant with the specified value of the `-O' option.
30048
30049     You typically use this function in an embedded application where
30050     memory is a critical resource.  If you have some complex
30051     calculation, you may want it to be folded if it involves
30052     constants, but need to call a function if it does not.  For
30053     example:
30054
30055          #define Scale_Value(X)      \
30056            (__builtin_constant_p (X) \
30057            ? ((X) * SCALE + OFFSET) : Scale (X))
30058
30059     You may use this built-in function in either a macro or an inline
30060     function.  However, if you use it in an inlined function and pass
30061     an argument of the function as the argument to the built-in, GCC
30062     never returns 1 when you call the inline function with a string
30063     constant or compound literal (*note Compound Literals::) and does
30064     not return 1 when you pass a constant numeric value to the inline
30065     function unless you specify the `-O' option.
30066
30067     You may also use `__builtin_constant_p' in initializers for static
30068     data.  For instance, you can write
30069
30070          static const int table[] = {
30071             __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
30072             /* ... */
30073          };
30074
30075     This is an acceptable initializer even if EXPRESSION is not a
30076     constant expression, including the case where
30077     `__builtin_constant_p' returns 1 because EXPRESSION can be folded
30078     to a constant but EXPRESSION contains operands that are not
30079     otherwise permitted in a static initializer (for example, `0 &&
30080     foo ()').  GCC must be more conservative about evaluating the
30081     built-in in this case, because it has no opportunity to perform
30082     optimization.
30083
30084     Previous versions of GCC did not accept this built-in in data
30085     initializers.  The earliest version where it is completely safe is
30086     3.0.1.
30087
30088 -- Built-in Function: long __builtin_expect (long EXP, long C)
30089     You may use `__builtin_expect' to provide the compiler with branch
30090     prediction information.  In general, you should prefer to use
30091     actual profile feedback for this (`-fprofile-arcs'), as
30092     programmers are notoriously bad at predicting how their programs
30093     actually perform.  However, there are applications in which this
30094     data is hard to collect.
30095
30096     The return value is the value of EXP, which should be an integral
30097     expression.  The semantics of the built-in are that it is expected
30098     that EXP == C.  For example:
30099
30100          if (__builtin_expect (x, 0))
30101            foo ();
30102
30103     indicates that we do not expect to call `foo', since we expect `x'
30104     to be zero.  Since you are limited to integral expressions for
30105     EXP, you should use constructions such as
30106
30107          if (__builtin_expect (ptr != NULL, 1))
30108            foo (*ptr);
30109
30110     when testing pointer or floating-point values.
30111
30112 -- Built-in Function: void __builtin_trap (void)
30113     This function causes the program to exit abnormally.  GCC
30114     implements this function by using a target-dependent mechanism
30115     (such as intentionally executing an illegal instruction) or by
30116     calling `abort'.  The mechanism used may vary from release to
30117     release so you should not rely on any particular implementation.
30118
30119 -- Built-in Function: void __builtin_unreachable (void)
30120     If control flow reaches the point of the `__builtin_unreachable',
30121     the program is undefined.  It is useful in situations where the
30122     compiler cannot deduce the unreachability of the code.
30123
30124     One such case is immediately following an `asm' statement that
30125     either never terminates, or one that transfers control elsewhere
30126     and never returns.  In this example, without the
30127     `__builtin_unreachable', GCC issues a warning that control reaches
30128     the end of a non-void function.  It also generates code to return
30129     after the `asm'.
30130
30131          int f (int c, int v)
30132          {
30133            if (c)
30134              {
30135                return v;
30136              }
30137            else
30138              {
30139                asm("jmp error_handler");
30140                __builtin_unreachable ();
30141              }
30142          }
30143
30144     Because the `asm' statement unconditionally transfers control out
30145     of the function, control never reaches the end of the function
30146     body.  The `__builtin_unreachable' is in fact unreachable and
30147     communicates this fact to the compiler.
30148
30149     Another use for `__builtin_unreachable' is following a call a
30150     function that never returns but that is not declared
30151     `__attribute__((noreturn))', as in this example:
30152
30153          void function_that_never_returns (void);
30154
30155          int g (int c)
30156          {
30157            if (c)
30158              {
30159                return 1;
30160              }
30161            else
30162              {
30163                function_that_never_returns ();
30164                __builtin_unreachable ();
30165              }
30166          }
30167
30168
30169 -- Built-in Function: void *__builtin_assume_aligned (const void *EXP,
30170          size_t ALIGN, ...)
30171     This function returns its first argument, and allows the compiler
30172     to assume that the returned pointer is at least ALIGN bytes
30173     aligned.  This built-in can have either two or three arguments, if
30174     it has three, the third argument should have integer type, and if
30175     it is nonzero means misalignment offset.  For example:
30176
30177          void *x = __builtin_assume_aligned (arg, 16);
30178
30179     means that the compiler can assume `x', set to `arg', is at least
30180     16-byte aligned, while:
30181
30182          void *x = __builtin_assume_aligned (arg, 32, 8);
30183
30184     means that the compiler can assume for `x', set to `arg', that
30185     `(char *) x - 8' is 32-byte aligned.
30186
30187 -- Built-in Function: int __builtin_LINE ()
30188     This function is the equivalent to the preprocessor `__LINE__'
30189     macro and returns the line number of the invocation of the
30190     built-in.
30191
30192 -- Built-in Function: int __builtin_FUNCTION ()
30193     This function is the equivalent to the preprocessor `__FUNCTION__'
30194     macro and returns the function name the invocation of the built-in
30195     is in.
30196
30197 -- Built-in Function: int __builtin_FILE ()
30198     This function is the equivalent to the preprocessor `__FILE__'
30199     macro and returns the file name the invocation of the built-in is
30200     in.
30201
30202 -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char
30203          *END)
30204     This function is used to flush the processor's instruction cache
30205     for the region of memory between BEGIN inclusive and END
30206     exclusive.  Some targets require that the instruction cache be
30207     flushed, after modifying memory containing code, in order to obtain
30208     deterministic behavior.
30209
30210     If the target does not require instruction cache flushes,
30211     `__builtin___clear_cache' has no effect.  Otherwise either
30212     instructions are emitted in-line to clear the instruction cache or
30213     a call to the `__clear_cache' function in libgcc is made.
30214
30215 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
30216     This function is used to minimize cache-miss latency by moving
30217     data into a cache before it is accessed.  You can insert calls to
30218     `__builtin_prefetch' into code for which you know addresses of
30219     data in memory that is likely to be accessed soon.  If the target
30220     supports them, data prefetch instructions are generated.  If the
30221     prefetch is done early enough before the access then the data will
30222     be in the cache by the time it is accessed.
30223
30224     The value of ADDR is the address of the memory to prefetch.  There
30225     are two optional arguments, RW and LOCALITY.  The value of RW is a
30226     compile-time constant one or zero; one means that the prefetch is
30227     preparing for a write to the memory address and zero, the default,
30228     means that the prefetch is preparing for a read.  The value
30229     LOCALITY must be a compile-time constant integer between zero and
30230     three.  A value of zero means that the data has no temporal
30231     locality, so it need not be left in the cache after the access.  A
30232     value of three means that the data has a high degree of temporal
30233     locality and should be left in all levels of cache possible.
30234     Values of one and two mean, respectively, a low or moderate degree
30235     of temporal locality.  The default is three.
30236
30237          for (i = 0; i < n; i++)
30238            {
30239              a[i] = a[i] + b[i];
30240              __builtin_prefetch (&a[i+j], 1, 1);
30241              __builtin_prefetch (&b[i+j], 0, 1);
30242              /* ... */
30243            }
30244
30245     Data prefetch does not generate faults if ADDR is invalid, but the
30246     address expression itself must be valid.  For example, a prefetch
30247     of `p->next' does not fault if `p->next' is not a valid address,
30248     but evaluation faults if `p' is not a valid address.
30249
30250     If the target does not support data prefetch, the address
30251     expression is evaluated if it includes side effects but no other
30252     code is generated and GCC does not issue a warning.
30253
30254 -- Built-in Function: double __builtin_huge_val (void)
30255     Returns a positive infinity, if supported by the floating-point
30256     format, else `DBL_MAX'.  This function is suitable for
30257     implementing the ISO C macro `HUGE_VAL'.
30258
30259 -- Built-in Function: float __builtin_huge_valf (void)
30260     Similar to `__builtin_huge_val', except the return type is `float'.
30261
30262 -- Built-in Function: long double __builtin_huge_vall (void)
30263     Similar to `__builtin_huge_val', except the return type is `long
30264     double'.
30265
30266 -- Built-in Function: int __builtin_fpclassify (int, int, int, int,
30267          int, ...)
30268     This built-in implements the C99 fpclassify functionality.  The
30269     first five int arguments should be the target library's notion of
30270     the possible FP classes and are used for return values.  They must
30271     be constant values and they must appear in this order: `FP_NAN',
30272     `FP_INFINITE', `FP_NORMAL', `FP_SUBNORMAL' and `FP_ZERO'.  The
30273     ellipsis is for exactly one floating-point value to classify.  GCC
30274     treats the last argument as type-generic, which means it does not
30275     do default promotion from float to double.
30276
30277 -- Built-in Function: double __builtin_inf (void)
30278     Similar to `__builtin_huge_val', except a warning is generated if
30279     the target floating-point format does not support infinities.
30280
30281 -- Built-in Function: _Decimal32 __builtin_infd32 (void)
30282     Similar to `__builtin_inf', except the return type is `_Decimal32'.
30283
30284 -- Built-in Function: _Decimal64 __builtin_infd64 (void)
30285     Similar to `__builtin_inf', except the return type is `_Decimal64'.
30286
30287 -- Built-in Function: _Decimal128 __builtin_infd128 (void)
30288     Similar to `__builtin_inf', except the return type is
30289     `_Decimal128'.
30290
30291 -- Built-in Function: float __builtin_inff (void)
30292     Similar to `__builtin_inf', except the return type is `float'.
30293     This function is suitable for implementing the ISO C99 macro
30294     `INFINITY'.
30295
30296 -- Built-in Function: long double __builtin_infl (void)
30297     Similar to `__builtin_inf', except the return type is `long
30298     double'.
30299
30300 -- Built-in Function: int __builtin_isinf_sign (...)
30301     Similar to `isinf', except the return value is negative for an
30302     argument of `-Inf'.  Note while the parameter list is an ellipsis,
30303     this function only accepts exactly one floating-point argument.
30304     GCC treats this parameter as type-generic, which means it does not
30305     do default promotion from float to double.
30306
30307 -- Built-in Function: double __builtin_nan (const char *str)
30308     This is an implementation of the ISO C99 function `nan'.
30309
30310     Since ISO C99 defines this function in terms of `strtod', which we
30311     do not implement, a description of the parsing is in order.  The
30312     string is parsed as by `strtol'; that is, the base is recognized by
30313     leading `0' or `0x' prefixes.  The number parsed is placed in the
30314     significand such that the least significant bit of the number is
30315     at the least significant bit of the significand.  The number is
30316     truncated to fit the significand field provided.  The significand
30317     is forced to be a quiet NaN.
30318
30319     This function, if given a string literal all of which would have
30320     been consumed by `strtol', is evaluated early enough that it is
30321     considered a compile-time constant.
30322
30323 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str)
30324     Similar to `__builtin_nan', except the return type is `_Decimal32'.
30325
30326 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str)
30327     Similar to `__builtin_nan', except the return type is `_Decimal64'.
30328
30329 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str)
30330     Similar to `__builtin_nan', except the return type is
30331     `_Decimal128'.
30332
30333 -- Built-in Function: float __builtin_nanf (const char *str)
30334     Similar to `__builtin_nan', except the return type is `float'.
30335
30336 -- Built-in Function: long double __builtin_nanl (const char *str)
30337     Similar to `__builtin_nan', except the return type is `long
30338     double'.
30339
30340 -- Built-in Function: double __builtin_nans (const char *str)
30341     Similar to `__builtin_nan', except the significand is forced to be
30342     a signaling NaN.  The `nans' function is proposed by WG14 N965.
30343
30344 -- Built-in Function: float __builtin_nansf (const char *str)
30345     Similar to `__builtin_nans', except the return type is `float'.
30346
30347 -- Built-in Function: long double __builtin_nansl (const char *str)
30348     Similar to `__builtin_nans', except the return type is `long
30349     double'.
30350
30351 -- Built-in Function: int __builtin_ffs (unsigned int x)
30352     Returns one plus the index of the least significant 1-bit of X, or
30353     if X is zero, returns zero.
30354
30355 -- Built-in Function: int __builtin_clz (unsigned int x)
30356     Returns the number of leading 0-bits in X, starting at the most
30357     significant bit position.  If X is 0, the result is undefined.
30358
30359 -- Built-in Function: int __builtin_ctz (unsigned int x)
30360     Returns the number of trailing 0-bits in X, starting at the least
30361     significant bit position.  If X is 0, the result is undefined.
30362
30363 -- Built-in Function: int __builtin_clrsb (int x)
30364     Returns the number of leading redundant sign bits in X, i.e. the
30365     number of bits following the most significant bit that are
30366     identical to it.  There are no special cases for 0 or other values.
30367
30368 -- Built-in Function: int __builtin_popcount (unsigned int x)
30369     Returns the number of 1-bits in X.
30370
30371 -- Built-in Function: int __builtin_parity (unsigned int x)
30372     Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
30373
30374 -- Built-in Function: int __builtin_ffsl (unsigned long)
30375     Similar to `__builtin_ffs', except the argument type is `unsigned
30376     long'.
30377
30378 -- Built-in Function: int __builtin_clzl (unsigned long)
30379     Similar to `__builtin_clz', except the argument type is `unsigned
30380     long'.
30381
30382 -- Built-in Function: int __builtin_ctzl (unsigned long)
30383     Similar to `__builtin_ctz', except the argument type is `unsigned
30384     long'.
30385
30386 -- Built-in Function: int __builtin_clrsbl (long)
30387     Similar to `__builtin_clrsb', except the argument type is `long'.
30388
30389 -- Built-in Function: int __builtin_popcountl (unsigned long)
30390     Similar to `__builtin_popcount', except the argument type is
30391     `unsigned long'.
30392
30393 -- Built-in Function: int __builtin_parityl (unsigned long)
30394     Similar to `__builtin_parity', except the argument type is
30395     `unsigned long'.
30396
30397 -- Built-in Function: int __builtin_ffsll (unsigned long long)
30398     Similar to `__builtin_ffs', except the argument type is `unsigned
30399     long long'.
30400
30401 -- Built-in Function: int __builtin_clzll (unsigned long long)
30402     Similar to `__builtin_clz', except the argument type is `unsigned
30403     long long'.
30404
30405 -- Built-in Function: int __builtin_ctzll (unsigned long long)
30406     Similar to `__builtin_ctz', except the argument type is `unsigned
30407     long long'.
30408
30409 -- Built-in Function: int __builtin_clrsbll (long long)
30410     Similar to `__builtin_clrsb', except the argument type is `long
30411     long'.
30412
30413 -- Built-in Function: int __builtin_popcountll (unsigned long long)
30414     Similar to `__builtin_popcount', except the argument type is
30415     `unsigned long long'.
30416
30417 -- Built-in Function: int __builtin_parityll (unsigned long long)
30418     Similar to `__builtin_parity', except the argument type is
30419     `unsigned long long'.
30420
30421 -- Built-in Function: double __builtin_powi (double, int)
30422     Returns the first argument raised to the power of the second.
30423     Unlike the `pow' function no guarantees about precision and
30424     rounding are made.
30425
30426 -- Built-in Function: float __builtin_powif (float, int)
30427     Similar to `__builtin_powi', except the argument and return types
30428     are `float'.
30429
30430 -- Built-in Function: long double __builtin_powil (long double, int)
30431     Similar to `__builtin_powi', except the argument and return types
30432     are `long double'.
30433
30434 -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t x)
30435     Returns X with the order of the bytes reversed; for example,
30436     `0xaabb' becomes `0xbbaa'.  Byte here always means exactly 8 bits.
30437
30438 -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t x)
30439     Similar to `__builtin_bswap16', except the argument and return
30440     types are 32 bit.
30441
30442 -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t x)
30443     Similar to `__builtin_bswap32', except the argument and return
30444     types are 64 bit.
30445
30446
30447File: gcc.info,  Node: Target Builtins,  Next: Target Format Checks,  Prev: Other Builtins,  Up: C Extensions
30448
304496.56 Built-in Functions Specific to Particular Target Machines
30450==============================================================
30451
30452On some target machines, GCC supports many built-in functions specific
30453to those machines.  Generally these generate calls to specific machine
30454instructions, but allow the compiler to schedule those calls.
30455
30456* Menu:
30457
30458* Alpha Built-in Functions::
30459* ARM iWMMXt Built-in Functions::
30460* ARM NEON Intrinsics::
30461* AVR Built-in Functions::
30462* Blackfin Built-in Functions::
30463* FR-V Built-in Functions::
30464* X86 Built-in Functions::
30465* X86 transactional memory intrinsics::
30466* MIPS DSP Built-in Functions::
30467* MIPS Paired-Single Support::
30468* MIPS Loongson Built-in Functions::
30469* Other MIPS Built-in Functions::
30470* picoChip Built-in Functions::
30471* PowerPC Built-in Functions::
30472* PowerPC AltiVec/VSX Built-in Functions::
30473* PowerPC Hardware Transactional Memory Built-in Functions::
30474* RX Built-in Functions::
30475* S/390 System z Built-in Functions::
30476* SH Built-in Functions::
30477* SPARC VIS Built-in Functions::
30478* SPU Built-in Functions::
30479* TI C6X Built-in Functions::
30480* TILE-Gx Built-in Functions::
30481* TILEPro Built-in Functions::
30482
30483
30484File: gcc.info,  Node: Alpha Built-in Functions,  Next: ARM iWMMXt Built-in Functions,  Up: Target Builtins
30485
304866.56.1 Alpha Built-in Functions
30487-------------------------------
30488
30489These built-in functions are available for the Alpha family of
30490processors, depending on the command-line switches used.
30491
30492 The following built-in functions are always available.  They all
30493generate the machine instruction that is part of the name.
30494
30495     long __builtin_alpha_implver (void)
30496     long __builtin_alpha_rpcc (void)
30497     long __builtin_alpha_amask (long)
30498     long __builtin_alpha_cmpbge (long, long)
30499     long __builtin_alpha_extbl (long, long)
30500     long __builtin_alpha_extwl (long, long)
30501     long __builtin_alpha_extll (long, long)
30502     long __builtin_alpha_extql (long, long)
30503     long __builtin_alpha_extwh (long, long)
30504     long __builtin_alpha_extlh (long, long)
30505     long __builtin_alpha_extqh (long, long)
30506     long __builtin_alpha_insbl (long, long)
30507     long __builtin_alpha_inswl (long, long)
30508     long __builtin_alpha_insll (long, long)
30509     long __builtin_alpha_insql (long, long)
30510     long __builtin_alpha_inswh (long, long)
30511     long __builtin_alpha_inslh (long, long)
30512     long __builtin_alpha_insqh (long, long)
30513     long __builtin_alpha_mskbl (long, long)
30514     long __builtin_alpha_mskwl (long, long)
30515     long __builtin_alpha_mskll (long, long)
30516     long __builtin_alpha_mskql (long, long)
30517     long __builtin_alpha_mskwh (long, long)
30518     long __builtin_alpha_msklh (long, long)
30519     long __builtin_alpha_mskqh (long, long)
30520     long __builtin_alpha_umulh (long, long)
30521     long __builtin_alpha_zap (long, long)
30522     long __builtin_alpha_zapnot (long, long)
30523
30524 The following built-in functions are always with `-mmax' or
30525`-mcpu=CPU' where CPU is `pca56' or later.  They all generate the
30526machine instruction that is part of the name.
30527
30528     long __builtin_alpha_pklb (long)
30529     long __builtin_alpha_pkwb (long)
30530     long __builtin_alpha_unpkbl (long)
30531     long __builtin_alpha_unpkbw (long)
30532     long __builtin_alpha_minub8 (long, long)
30533     long __builtin_alpha_minsb8 (long, long)
30534     long __builtin_alpha_minuw4 (long, long)
30535     long __builtin_alpha_minsw4 (long, long)
30536     long __builtin_alpha_maxub8 (long, long)
30537     long __builtin_alpha_maxsb8 (long, long)
30538     long __builtin_alpha_maxuw4 (long, long)
30539     long __builtin_alpha_maxsw4 (long, long)
30540     long __builtin_alpha_perr (long, long)
30541
30542 The following built-in functions are always with `-mcix' or
30543`-mcpu=CPU' where CPU is `ev67' or later.  They all generate the
30544machine instruction that is part of the name.
30545
30546     long __builtin_alpha_cttz (long)
30547     long __builtin_alpha_ctlz (long)
30548     long __builtin_alpha_ctpop (long)
30549
30550 The following built-in functions are available on systems that use the
30551OSF/1 PALcode.  Normally they invoke the `rduniq' and `wruniq' PAL
30552calls, but when invoked with `-mtls-kernel', they invoke `rdval' and
30553`wrval'.
30554
30555     void *__builtin_thread_pointer (void)
30556     void __builtin_set_thread_pointer (void *)
30557
30558
30559File: gcc.info,  Node: ARM iWMMXt Built-in Functions,  Next: ARM NEON Intrinsics,  Prev: Alpha Built-in Functions,  Up: Target Builtins
30560
305616.56.2 ARM iWMMXt Built-in Functions
30562------------------------------------
30563
30564These built-in functions are available for the ARM family of processors
30565when the `-mcpu=iwmmxt' switch is used:
30566
30567     typedef int v2si __attribute__ ((vector_size (8)));
30568     typedef short v4hi __attribute__ ((vector_size (8)));
30569     typedef char v8qi __attribute__ ((vector_size (8)));
30570
30571     int __builtin_arm_getwcgr0 (void)
30572     void __builtin_arm_setwcgr0 (int)
30573     int __builtin_arm_getwcgr1 (void)
30574     void __builtin_arm_setwcgr1 (int)
30575     int __builtin_arm_getwcgr2 (void)
30576     void __builtin_arm_setwcgr2 (int)
30577     int __builtin_arm_getwcgr3 (void)
30578     void __builtin_arm_setwcgr3 (int)
30579     int __builtin_arm_textrmsb (v8qi, int)
30580     int __builtin_arm_textrmsh (v4hi, int)
30581     int __builtin_arm_textrmsw (v2si, int)
30582     int __builtin_arm_textrmub (v8qi, int)
30583     int __builtin_arm_textrmuh (v4hi, int)
30584     int __builtin_arm_textrmuw (v2si, int)
30585     v8qi __builtin_arm_tinsrb (v8qi, int, int)
30586     v4hi __builtin_arm_tinsrh (v4hi, int, int)
30587     v2si __builtin_arm_tinsrw (v2si, int, int)
30588     long long __builtin_arm_tmia (long long, int, int)
30589     long long __builtin_arm_tmiabb (long long, int, int)
30590     long long __builtin_arm_tmiabt (long long, int, int)
30591     long long __builtin_arm_tmiaph (long long, int, int)
30592     long long __builtin_arm_tmiatb (long long, int, int)
30593     long long __builtin_arm_tmiatt (long long, int, int)
30594     int __builtin_arm_tmovmskb (v8qi)
30595     int __builtin_arm_tmovmskh (v4hi)
30596     int __builtin_arm_tmovmskw (v2si)
30597     long long __builtin_arm_waccb (v8qi)
30598     long long __builtin_arm_wacch (v4hi)
30599     long long __builtin_arm_waccw (v2si)
30600     v8qi __builtin_arm_waddb (v8qi, v8qi)
30601     v8qi __builtin_arm_waddbss (v8qi, v8qi)
30602     v8qi __builtin_arm_waddbus (v8qi, v8qi)
30603     v4hi __builtin_arm_waddh (v4hi, v4hi)
30604     v4hi __builtin_arm_waddhss (v4hi, v4hi)
30605     v4hi __builtin_arm_waddhus (v4hi, v4hi)
30606     v2si __builtin_arm_waddw (v2si, v2si)
30607     v2si __builtin_arm_waddwss (v2si, v2si)
30608     v2si __builtin_arm_waddwus (v2si, v2si)
30609     v8qi __builtin_arm_walign (v8qi, v8qi, int)
30610     long long __builtin_arm_wand(long long, long long)
30611     long long __builtin_arm_wandn (long long, long long)
30612     v8qi __builtin_arm_wavg2b (v8qi, v8qi)
30613     v8qi __builtin_arm_wavg2br (v8qi, v8qi)
30614     v4hi __builtin_arm_wavg2h (v4hi, v4hi)
30615     v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
30616     v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
30617     v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
30618     v2si __builtin_arm_wcmpeqw (v2si, v2si)
30619     v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
30620     v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
30621     v2si __builtin_arm_wcmpgtsw (v2si, v2si)
30622     v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
30623     v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
30624     v2si __builtin_arm_wcmpgtuw (v2si, v2si)
30625     long long __builtin_arm_wmacs (long long, v4hi, v4hi)
30626     long long __builtin_arm_wmacsz (v4hi, v4hi)
30627     long long __builtin_arm_wmacu (long long, v4hi, v4hi)
30628     long long __builtin_arm_wmacuz (v4hi, v4hi)
30629     v4hi __builtin_arm_wmadds (v4hi, v4hi)
30630     v4hi __builtin_arm_wmaddu (v4hi, v4hi)
30631     v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
30632     v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
30633     v2si __builtin_arm_wmaxsw (v2si, v2si)
30634     v8qi __builtin_arm_wmaxub (v8qi, v8qi)
30635     v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
30636     v2si __builtin_arm_wmaxuw (v2si, v2si)
30637     v8qi __builtin_arm_wminsb (v8qi, v8qi)
30638     v4hi __builtin_arm_wminsh (v4hi, v4hi)
30639     v2si __builtin_arm_wminsw (v2si, v2si)
30640     v8qi __builtin_arm_wminub (v8qi, v8qi)
30641     v4hi __builtin_arm_wminuh (v4hi, v4hi)
30642     v2si __builtin_arm_wminuw (v2si, v2si)
30643     v4hi __builtin_arm_wmulsm (v4hi, v4hi)
30644     v4hi __builtin_arm_wmulul (v4hi, v4hi)
30645     v4hi __builtin_arm_wmulum (v4hi, v4hi)
30646     long long __builtin_arm_wor (long long, long long)
30647     v2si __builtin_arm_wpackdss (long long, long long)
30648     v2si __builtin_arm_wpackdus (long long, long long)
30649     v8qi __builtin_arm_wpackhss (v4hi, v4hi)
30650     v8qi __builtin_arm_wpackhus (v4hi, v4hi)
30651     v4hi __builtin_arm_wpackwss (v2si, v2si)
30652     v4hi __builtin_arm_wpackwus (v2si, v2si)
30653     long long __builtin_arm_wrord (long long, long long)
30654     long long __builtin_arm_wrordi (long long, int)
30655     v4hi __builtin_arm_wrorh (v4hi, long long)
30656     v4hi __builtin_arm_wrorhi (v4hi, int)
30657     v2si __builtin_arm_wrorw (v2si, long long)
30658     v2si __builtin_arm_wrorwi (v2si, int)
30659     v2si __builtin_arm_wsadb (v2si, v8qi, v8qi)
30660     v2si __builtin_arm_wsadbz (v8qi, v8qi)
30661     v2si __builtin_arm_wsadh (v2si, v4hi, v4hi)
30662     v2si __builtin_arm_wsadhz (v4hi, v4hi)
30663     v4hi __builtin_arm_wshufh (v4hi, int)
30664     long long __builtin_arm_wslld (long long, long long)
30665     long long __builtin_arm_wslldi (long long, int)
30666     v4hi __builtin_arm_wsllh (v4hi, long long)
30667     v4hi __builtin_arm_wsllhi (v4hi, int)
30668     v2si __builtin_arm_wsllw (v2si, long long)
30669     v2si __builtin_arm_wsllwi (v2si, int)
30670     long long __builtin_arm_wsrad (long long, long long)
30671     long long __builtin_arm_wsradi (long long, int)
30672     v4hi __builtin_arm_wsrah (v4hi, long long)
30673     v4hi __builtin_arm_wsrahi (v4hi, int)
30674     v2si __builtin_arm_wsraw (v2si, long long)
30675     v2si __builtin_arm_wsrawi (v2si, int)
30676     long long __builtin_arm_wsrld (long long, long long)
30677     long long __builtin_arm_wsrldi (long long, int)
30678     v4hi __builtin_arm_wsrlh (v4hi, long long)
30679     v4hi __builtin_arm_wsrlhi (v4hi, int)
30680     v2si __builtin_arm_wsrlw (v2si, long long)
30681     v2si __builtin_arm_wsrlwi (v2si, int)
30682     v8qi __builtin_arm_wsubb (v8qi, v8qi)
30683     v8qi __builtin_arm_wsubbss (v8qi, v8qi)
30684     v8qi __builtin_arm_wsubbus (v8qi, v8qi)
30685     v4hi __builtin_arm_wsubh (v4hi, v4hi)
30686     v4hi __builtin_arm_wsubhss (v4hi, v4hi)
30687     v4hi __builtin_arm_wsubhus (v4hi, v4hi)
30688     v2si __builtin_arm_wsubw (v2si, v2si)
30689     v2si __builtin_arm_wsubwss (v2si, v2si)
30690     v2si __builtin_arm_wsubwus (v2si, v2si)
30691     v4hi __builtin_arm_wunpckehsb (v8qi)
30692     v2si __builtin_arm_wunpckehsh (v4hi)
30693     long long __builtin_arm_wunpckehsw (v2si)
30694     v4hi __builtin_arm_wunpckehub (v8qi)
30695     v2si __builtin_arm_wunpckehuh (v4hi)
30696     long long __builtin_arm_wunpckehuw (v2si)
30697     v4hi __builtin_arm_wunpckelsb (v8qi)
30698     v2si __builtin_arm_wunpckelsh (v4hi)
30699     long long __builtin_arm_wunpckelsw (v2si)
30700     v4hi __builtin_arm_wunpckelub (v8qi)
30701     v2si __builtin_arm_wunpckeluh (v4hi)
30702     long long __builtin_arm_wunpckeluw (v2si)
30703     v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
30704     v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
30705     v2si __builtin_arm_wunpckihw (v2si, v2si)
30706     v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
30707     v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
30708     v2si __builtin_arm_wunpckilw (v2si, v2si)
30709     long long __builtin_arm_wxor (long long, long long)
30710     long long __builtin_arm_wzero ()
30711
30712
30713File: gcc.info,  Node: ARM NEON Intrinsics,  Next: AVR Built-in Functions,  Prev: ARM iWMMXt Built-in Functions,  Up: Target Builtins
30714
307156.56.3 ARM NEON Intrinsics
30716--------------------------
30717
30718These built-in intrinsics for the ARM Advanced SIMD extension are
30719available when the `-mfpu=neon' switch is used:
30720
307216.56.3.1 Addition
30722.................
30723
30724   * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t)
30725     _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0'
30726
30727   * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t)
30728     _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0'
30729
30730   * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t)
30731     _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0'
30732
30733   * int32x2_t vadd_s32 (int32x2_t, int32x2_t)
30734     _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0'
30735
30736   * int16x4_t vadd_s16 (int16x4_t, int16x4_t)
30737     _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0'
30738
30739   * int8x8_t vadd_s8 (int8x8_t, int8x8_t)
30740     _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0'
30741
30742   * float32x2_t vadd_f32 (float32x2_t, float32x2_t)
30743     _Form of expected instruction(s):_ `vadd.f32 D0, D0, D0'
30744
30745   * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t)
30746
30747   * int64x1_t vadd_s64 (int64x1_t, int64x1_t)
30748
30749   * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t)
30750     _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0'
30751
30752   * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t)
30753     _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0'
30754
30755   * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t)
30756     _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0'
30757
30758   * int32x4_t vaddq_s32 (int32x4_t, int32x4_t)
30759     _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0'
30760
30761   * int16x8_t vaddq_s16 (int16x8_t, int16x8_t)
30762     _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0'
30763
30764   * int8x16_t vaddq_s8 (int8x16_t, int8x16_t)
30765     _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0'
30766
30767   * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t)
30768     _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0'
30769
30770   * int64x2_t vaddq_s64 (int64x2_t, int64x2_t)
30771     _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0'
30772
30773   * float32x4_t vaddq_f32 (float32x4_t, float32x4_t)
30774     _Form of expected instruction(s):_ `vadd.f32 Q0, Q0, Q0'
30775
30776   * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t)
30777     _Form of expected instruction(s):_ `vaddl.u32 Q0, D0, D0'
30778
30779   * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t)
30780     _Form of expected instruction(s):_ `vaddl.u16 Q0, D0, D0'
30781
30782   * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t)
30783     _Form of expected instruction(s):_ `vaddl.u8 Q0, D0, D0'
30784
30785   * int64x2_t vaddl_s32 (int32x2_t, int32x2_t)
30786     _Form of expected instruction(s):_ `vaddl.s32 Q0, D0, D0'
30787
30788   * int32x4_t vaddl_s16 (int16x4_t, int16x4_t)
30789     _Form of expected instruction(s):_ `vaddl.s16 Q0, D0, D0'
30790
30791   * int16x8_t vaddl_s8 (int8x8_t, int8x8_t)
30792     _Form of expected instruction(s):_ `vaddl.s8 Q0, D0, D0'
30793
30794   * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t)
30795     _Form of expected instruction(s):_ `vaddw.u32 Q0, Q0, D0'
30796
30797   * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t)
30798     _Form of expected instruction(s):_ `vaddw.u16 Q0, Q0, D0'
30799
30800   * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t)
30801     _Form of expected instruction(s):_ `vaddw.u8 Q0, Q0, D0'
30802
30803   * int64x2_t vaddw_s32 (int64x2_t, int32x2_t)
30804     _Form of expected instruction(s):_ `vaddw.s32 Q0, Q0, D0'
30805
30806   * int32x4_t vaddw_s16 (int32x4_t, int16x4_t)
30807     _Form of expected instruction(s):_ `vaddw.s16 Q0, Q0, D0'
30808
30809   * int16x8_t vaddw_s8 (int16x8_t, int8x8_t)
30810     _Form of expected instruction(s):_ `vaddw.s8 Q0, Q0, D0'
30811
30812   * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t)
30813     _Form of expected instruction(s):_ `vhadd.u32 D0, D0, D0'
30814
30815   * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t)
30816     _Form of expected instruction(s):_ `vhadd.u16 D0, D0, D0'
30817
30818   * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t)
30819     _Form of expected instruction(s):_ `vhadd.u8 D0, D0, D0'
30820
30821   * int32x2_t vhadd_s32 (int32x2_t, int32x2_t)
30822     _Form of expected instruction(s):_ `vhadd.s32 D0, D0, D0'
30823
30824   * int16x4_t vhadd_s16 (int16x4_t, int16x4_t)
30825     _Form of expected instruction(s):_ `vhadd.s16 D0, D0, D0'
30826
30827   * int8x8_t vhadd_s8 (int8x8_t, int8x8_t)
30828     _Form of expected instruction(s):_ `vhadd.s8 D0, D0, D0'
30829
30830   * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t)
30831     _Form of expected instruction(s):_ `vhadd.u32 Q0, Q0, Q0'
30832
30833   * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t)
30834     _Form of expected instruction(s):_ `vhadd.u16 Q0, Q0, Q0'
30835
30836   * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t)
30837     _Form of expected instruction(s):_ `vhadd.u8 Q0, Q0, Q0'
30838
30839   * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t)
30840     _Form of expected instruction(s):_ `vhadd.s32 Q0, Q0, Q0'
30841
30842   * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t)
30843     _Form of expected instruction(s):_ `vhadd.s16 Q0, Q0, Q0'
30844
30845   * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t)
30846     _Form of expected instruction(s):_ `vhadd.s8 Q0, Q0, Q0'
30847
30848   * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t)
30849     _Form of expected instruction(s):_ `vrhadd.u32 D0, D0, D0'
30850
30851   * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t)
30852     _Form of expected instruction(s):_ `vrhadd.u16 D0, D0, D0'
30853
30854   * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t)
30855     _Form of expected instruction(s):_ `vrhadd.u8 D0, D0, D0'
30856
30857   * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t)
30858     _Form of expected instruction(s):_ `vrhadd.s32 D0, D0, D0'
30859
30860   * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t)
30861     _Form of expected instruction(s):_ `vrhadd.s16 D0, D0, D0'
30862
30863   * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t)
30864     _Form of expected instruction(s):_ `vrhadd.s8 D0, D0, D0'
30865
30866   * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t)
30867     _Form of expected instruction(s):_ `vrhadd.u32 Q0, Q0, Q0'
30868
30869   * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t)
30870     _Form of expected instruction(s):_ `vrhadd.u16 Q0, Q0, Q0'
30871
30872   * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t)
30873     _Form of expected instruction(s):_ `vrhadd.u8 Q0, Q0, Q0'
30874
30875   * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t)
30876     _Form of expected instruction(s):_ `vrhadd.s32 Q0, Q0, Q0'
30877
30878   * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t)
30879     _Form of expected instruction(s):_ `vrhadd.s16 Q0, Q0, Q0'
30880
30881   * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t)
30882     _Form of expected instruction(s):_ `vrhadd.s8 Q0, Q0, Q0'
30883
30884   * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t)
30885     _Form of expected instruction(s):_ `vqadd.u32 D0, D0, D0'
30886
30887   * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t)
30888     _Form of expected instruction(s):_ `vqadd.u16 D0, D0, D0'
30889
30890   * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t)
30891     _Form of expected instruction(s):_ `vqadd.u8 D0, D0, D0'
30892
30893   * int32x2_t vqadd_s32 (int32x2_t, int32x2_t)
30894     _Form of expected instruction(s):_ `vqadd.s32 D0, D0, D0'
30895
30896   * int16x4_t vqadd_s16 (int16x4_t, int16x4_t)
30897     _Form of expected instruction(s):_ `vqadd.s16 D0, D0, D0'
30898
30899   * int8x8_t vqadd_s8 (int8x8_t, int8x8_t)
30900     _Form of expected instruction(s):_ `vqadd.s8 D0, D0, D0'
30901
30902   * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t)
30903     _Form of expected instruction(s):_ `vqadd.u64 D0, D0, D0'
30904
30905   * int64x1_t vqadd_s64 (int64x1_t, int64x1_t)
30906     _Form of expected instruction(s):_ `vqadd.s64 D0, D0, D0'
30907
30908   * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t)
30909     _Form of expected instruction(s):_ `vqadd.u32 Q0, Q0, Q0'
30910
30911   * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t)
30912     _Form of expected instruction(s):_ `vqadd.u16 Q0, Q0, Q0'
30913
30914   * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t)
30915     _Form of expected instruction(s):_ `vqadd.u8 Q0, Q0, Q0'
30916
30917   * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t)
30918     _Form of expected instruction(s):_ `vqadd.s32 Q0, Q0, Q0'
30919
30920   * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t)
30921     _Form of expected instruction(s):_ `vqadd.s16 Q0, Q0, Q0'
30922
30923   * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t)
30924     _Form of expected instruction(s):_ `vqadd.s8 Q0, Q0, Q0'
30925
30926   * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t)
30927     _Form of expected instruction(s):_ `vqadd.u64 Q0, Q0, Q0'
30928
30929   * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t)
30930     _Form of expected instruction(s):_ `vqadd.s64 Q0, Q0, Q0'
30931
30932   * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t)
30933     _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0'
30934
30935   * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t)
30936     _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0'
30937
30938   * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t)
30939     _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0'
30940
30941   * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t)
30942     _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0'
30943
30944   * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t)
30945     _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0'
30946
30947   * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t)
30948     _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0'
30949
30950   * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t)
30951     _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0'
30952
30953   * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t)
30954     _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0'
30955
30956   * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t)
30957     _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0'
30958
30959   * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t)
30960     _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0'
30961
30962   * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t)
30963     _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0'
30964
30965   * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t)
30966     _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0'
30967
309686.56.3.2 Multiplication
30969.......................
30970
30971   * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t)
30972     _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0'
30973
30974   * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t)
30975     _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0'
30976
30977   * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t)
30978     _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0'
30979
30980   * int32x2_t vmul_s32 (int32x2_t, int32x2_t)
30981     _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0'
30982
30983   * int16x4_t vmul_s16 (int16x4_t, int16x4_t)
30984     _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0'
30985
30986   * int8x8_t vmul_s8 (int8x8_t, int8x8_t)
30987     _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0'
30988
30989   * float32x2_t vmul_f32 (float32x2_t, float32x2_t)
30990     _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0'
30991
30992   * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t)
30993     _Form of expected instruction(s):_ `vmul.p8 D0, D0, D0'
30994
30995   * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t)
30996     _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0'
30997
30998   * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t)
30999     _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0'
31000
31001   * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t)
31002     _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0'
31003
31004   * int32x4_t vmulq_s32 (int32x4_t, int32x4_t)
31005     _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0'
31006
31007   * int16x8_t vmulq_s16 (int16x8_t, int16x8_t)
31008     _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0'
31009
31010   * int8x16_t vmulq_s8 (int8x16_t, int8x16_t)
31011     _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0'
31012
31013   * float32x4_t vmulq_f32 (float32x4_t, float32x4_t)
31014     _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, Q0'
31015
31016   * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t)
31017     _Form of expected instruction(s):_ `vmul.p8 Q0, Q0, Q0'
31018
31019   * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t)
31020     _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0'
31021
31022   * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t)
31023     _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0'
31024
31025   * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t)
31026     _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, Q0'
31027
31028   * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t)
31029     _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, Q0'
31030
31031   * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t)
31032     _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0'
31033
31034   * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t)
31035     _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0'
31036
31037   * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t)
31038     _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, Q0'
31039
31040   * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t)
31041     _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, Q0'
31042
31043   * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t)
31044     _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0'
31045
31046   * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t)
31047     _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0'
31048
31049   * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t)
31050     _Form of expected instruction(s):_ `vmull.u8 Q0, D0, D0'
31051
31052   * int64x2_t vmull_s32 (int32x2_t, int32x2_t)
31053     _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0'
31054
31055   * int32x4_t vmull_s16 (int16x4_t, int16x4_t)
31056     _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0'
31057
31058   * int16x8_t vmull_s8 (int8x8_t, int8x8_t)
31059     _Form of expected instruction(s):_ `vmull.s8 Q0, D0, D0'
31060
31061   * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t)
31062     _Form of expected instruction(s):_ `vmull.p8 Q0, D0, D0'
31063
31064   * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t)
31065     _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0'
31066
31067   * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t)
31068     _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0'
31069
310706.56.3.3 Multiply-accumulate
31071............................
31072
31073   * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
31074     _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0'
31075
31076   * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
31077     _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0'
31078
31079   * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
31080     _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0'
31081
31082   * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t)
31083     _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0'
31084
31085   * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t)
31086     _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0'
31087
31088   * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t)
31089     _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0'
31090
31091   * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t)
31092     _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0'
31093
31094   * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
31095     _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0'
31096
31097   * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
31098     _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0'
31099
31100   * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
31101     _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0'
31102
31103   * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t)
31104     _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0'
31105
31106   * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t)
31107     _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0'
31108
31109   * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t)
31110     _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0'
31111
31112   * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t)
31113     _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, Q0'
31114
31115   * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
31116     _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0'
31117
31118   * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
31119     _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0'
31120
31121   * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
31122     _Form of expected instruction(s):_ `vmlal.u8 Q0, D0, D0'
31123
31124   * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
31125     _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0'
31126
31127   * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
31128     _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0'
31129
31130   * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t)
31131     _Form of expected instruction(s):_ `vmlal.s8 Q0, D0, D0'
31132
31133   * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
31134     _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0'
31135
31136   * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
31137     _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0'
31138
311396.56.3.4 Multiply-subtract
31140..........................
31141
31142   * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
31143     _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0'
31144
31145   * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
31146     _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0'
31147
31148   * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
31149     _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0'
31150
31151   * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t)
31152     _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0'
31153
31154   * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t)
31155     _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0'
31156
31157   * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t)
31158     _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0'
31159
31160   * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t)
31161     _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0'
31162
31163   * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
31164     _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0'
31165
31166   * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
31167     _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0'
31168
31169   * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
31170     _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0'
31171
31172   * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t)
31173     _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0'
31174
31175   * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t)
31176     _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0'
31177
31178   * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t)
31179     _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0'
31180
31181   * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t)
31182     _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, Q0'
31183
31184   * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
31185     _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0'
31186
31187   * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
31188     _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0'
31189
31190   * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
31191     _Form of expected instruction(s):_ `vmlsl.u8 Q0, D0, D0'
31192
31193   * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
31194     _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0'
31195
31196   * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
31197     _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0'
31198
31199   * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t)
31200     _Form of expected instruction(s):_ `vmlsl.s8 Q0, D0, D0'
31201
31202   * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
31203     _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0'
31204
31205   * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
31206     _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0'
31207
312086.56.3.5 Fused-multiply-accumulate
31209..................................
31210
31211   * float32x2_t vfma_f32 (float32x2_t, float32x2_t, float32x2_t)
31212     _Form of expected instruction(s):_ `vfma.f32 D0, D0, D0'
31213
31214   * float32x4_t vfmaq_f32 (float32x4_t, float32x4_t, float32x4_t)
31215     _Form of expected instruction(s):_ `vfma.f32 Q0, Q0, Q0'
31216
312176.56.3.6 Fused-multiply-subtract
31218................................
31219
31220   * float32x2_t vfms_f32 (float32x2_t, float32x2_t, float32x2_t)
31221     _Form of expected instruction(s):_ `vfms.f32 D0, D0, D0'
31222
31223   * float32x4_t vfmsq_f32 (float32x4_t, float32x4_t, float32x4_t)
31224     _Form of expected instruction(s):_ `vfms.f32 Q0, Q0, Q0'
31225
312266.56.3.7 Round to integral (to nearest, ties to even)
31227.....................................................
31228
31229   * float32x2_t vrndn_f32 (float32x2_t)
31230     _Form of expected instruction(s):_ `vrintn.f32 D0, D0'
31231
31232   * float32x4_t vrndqn_f32 (float32x4_t)
31233     _Form of expected instruction(s):_ `vrintn.f32 Q0, Q0'
31234
312356.56.3.8 Round to integral (to nearest, ties away from zero)
31236............................................................
31237
31238   * float32x2_t vrnda_f32 (float32x2_t)
31239     _Form of expected instruction(s):_ `vrinta.f32 D0, D0'
31240
31241   * float32x4_t vrndqa_f32 (float32x4_t)
31242     _Form of expected instruction(s):_ `vrinta.f32 Q0, Q0'
31243
312446.56.3.9 Round to integral (towards +Inf)
31245.........................................
31246
31247   * float32x2_t vrndp_f32 (float32x2_t)
31248     _Form of expected instruction(s):_ `vrintp.f32 D0, D0'
31249
31250   * float32x4_t vrndqp_f32 (float32x4_t)
31251     _Form of expected instruction(s):_ `vrintp.f32 Q0, Q0'
31252
312536.56.3.10 Round to integral (towards -Inf)
31254..........................................
31255
31256   * float32x2_t vrndm_f32 (float32x2_t)
31257     _Form of expected instruction(s):_ `vrintm.f32 D0, D0'
31258
31259   * float32x4_t vrndqm_f32 (float32x4_t)
31260     _Form of expected instruction(s):_ `vrintm.f32 Q0, Q0'
31261
312626.56.3.11 Round to integral (towards 0)
31263.......................................
31264
31265   * float32x2_t vrnd_f32 (float32x2_t)
31266     _Form of expected instruction(s):_ `vrintz.f32 D0, D0'
31267
31268   * float32x4_t vrndq_f32 (float32x4_t)
31269     _Form of expected instruction(s):_ `vrintz.f32 Q0, Q0'
31270
312716.56.3.12 Subtraction
31272.....................
31273
31274   * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t)
31275     _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0'
31276
31277   * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t)
31278     _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0'
31279
31280   * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t)
31281     _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0'
31282
31283   * int32x2_t vsub_s32 (int32x2_t, int32x2_t)
31284     _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0'
31285
31286   * int16x4_t vsub_s16 (int16x4_t, int16x4_t)
31287     _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0'
31288
31289   * int8x8_t vsub_s8 (int8x8_t, int8x8_t)
31290     _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0'
31291
31292   * float32x2_t vsub_f32 (float32x2_t, float32x2_t)
31293     _Form of expected instruction(s):_ `vsub.f32 D0, D0, D0'
31294
31295   * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t)
31296
31297   * int64x1_t vsub_s64 (int64x1_t, int64x1_t)
31298
31299   * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t)
31300     _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0'
31301
31302   * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t)
31303     _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0'
31304
31305   * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t)
31306     _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0'
31307
31308   * int32x4_t vsubq_s32 (int32x4_t, int32x4_t)
31309     _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0'
31310
31311   * int16x8_t vsubq_s16 (int16x8_t, int16x8_t)
31312     _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0'
31313
31314   * int8x16_t vsubq_s8 (int8x16_t, int8x16_t)
31315     _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0'
31316
31317   * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t)
31318     _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0'
31319
31320   * int64x2_t vsubq_s64 (int64x2_t, int64x2_t)
31321     _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0'
31322
31323   * float32x4_t vsubq_f32 (float32x4_t, float32x4_t)
31324     _Form of expected instruction(s):_ `vsub.f32 Q0, Q0, Q0'
31325
31326   * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t)
31327     _Form of expected instruction(s):_ `vsubl.u32 Q0, D0, D0'
31328
31329   * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t)
31330     _Form of expected instruction(s):_ `vsubl.u16 Q0, D0, D0'
31331
31332   * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t)
31333     _Form of expected instruction(s):_ `vsubl.u8 Q0, D0, D0'
31334
31335   * int64x2_t vsubl_s32 (int32x2_t, int32x2_t)
31336     _Form of expected instruction(s):_ `vsubl.s32 Q0, D0, D0'
31337
31338   * int32x4_t vsubl_s16 (int16x4_t, int16x4_t)
31339     _Form of expected instruction(s):_ `vsubl.s16 Q0, D0, D0'
31340
31341   * int16x8_t vsubl_s8 (int8x8_t, int8x8_t)
31342     _Form of expected instruction(s):_ `vsubl.s8 Q0, D0, D0'
31343
31344   * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t)
31345     _Form of expected instruction(s):_ `vsubw.u32 Q0, Q0, D0'
31346
31347   * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t)
31348     _Form of expected instruction(s):_ `vsubw.u16 Q0, Q0, D0'
31349
31350   * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t)
31351     _Form of expected instruction(s):_ `vsubw.u8 Q0, Q0, D0'
31352
31353   * int64x2_t vsubw_s32 (int64x2_t, int32x2_t)
31354     _Form of expected instruction(s):_ `vsubw.s32 Q0, Q0, D0'
31355
31356   * int32x4_t vsubw_s16 (int32x4_t, int16x4_t)
31357     _Form of expected instruction(s):_ `vsubw.s16 Q0, Q0, D0'
31358
31359   * int16x8_t vsubw_s8 (int16x8_t, int8x8_t)
31360     _Form of expected instruction(s):_ `vsubw.s8 Q0, Q0, D0'
31361
31362   * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t)
31363     _Form of expected instruction(s):_ `vhsub.u32 D0, D0, D0'
31364
31365   * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t)
31366     _Form of expected instruction(s):_ `vhsub.u16 D0, D0, D0'
31367
31368   * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t)
31369     _Form of expected instruction(s):_ `vhsub.u8 D0, D0, D0'
31370
31371   * int32x2_t vhsub_s32 (int32x2_t, int32x2_t)
31372     _Form of expected instruction(s):_ `vhsub.s32 D0, D0, D0'
31373
31374   * int16x4_t vhsub_s16 (int16x4_t, int16x4_t)
31375     _Form of expected instruction(s):_ `vhsub.s16 D0, D0, D0'
31376
31377   * int8x8_t vhsub_s8 (int8x8_t, int8x8_t)
31378     _Form of expected instruction(s):_ `vhsub.s8 D0, D0, D0'
31379
31380   * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t)
31381     _Form of expected instruction(s):_ `vhsub.u32 Q0, Q0, Q0'
31382
31383   * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t)
31384     _Form of expected instruction(s):_ `vhsub.u16 Q0, Q0, Q0'
31385
31386   * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t)
31387     _Form of expected instruction(s):_ `vhsub.u8 Q0, Q0, Q0'
31388
31389   * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t)
31390     _Form of expected instruction(s):_ `vhsub.s32 Q0, Q0, Q0'
31391
31392   * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t)
31393     _Form of expected instruction(s):_ `vhsub.s16 Q0, Q0, Q0'
31394
31395   * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t)
31396     _Form of expected instruction(s):_ `vhsub.s8 Q0, Q0, Q0'
31397
31398   * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t)
31399     _Form of expected instruction(s):_ `vqsub.u32 D0, D0, D0'
31400
31401   * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t)
31402     _Form of expected instruction(s):_ `vqsub.u16 D0, D0, D0'
31403
31404   * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t)
31405     _Form of expected instruction(s):_ `vqsub.u8 D0, D0, D0'
31406
31407   * int32x2_t vqsub_s32 (int32x2_t, int32x2_t)
31408     _Form of expected instruction(s):_ `vqsub.s32 D0, D0, D0'
31409
31410   * int16x4_t vqsub_s16 (int16x4_t, int16x4_t)
31411     _Form of expected instruction(s):_ `vqsub.s16 D0, D0, D0'
31412
31413   * int8x8_t vqsub_s8 (int8x8_t, int8x8_t)
31414     _Form of expected instruction(s):_ `vqsub.s8 D0, D0, D0'
31415
31416   * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t)
31417     _Form of expected instruction(s):_ `vqsub.u64 D0, D0, D0'
31418
31419   * int64x1_t vqsub_s64 (int64x1_t, int64x1_t)
31420     _Form of expected instruction(s):_ `vqsub.s64 D0, D0, D0'
31421
31422   * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t)
31423     _Form of expected instruction(s):_ `vqsub.u32 Q0, Q0, Q0'
31424
31425   * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t)
31426     _Form of expected instruction(s):_ `vqsub.u16 Q0, Q0, Q0'
31427
31428   * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t)
31429     _Form of expected instruction(s):_ `vqsub.u8 Q0, Q0, Q0'
31430
31431   * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t)
31432     _Form of expected instruction(s):_ `vqsub.s32 Q0, Q0, Q0'
31433
31434   * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t)
31435     _Form of expected instruction(s):_ `vqsub.s16 Q0, Q0, Q0'
31436
31437   * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t)
31438     _Form of expected instruction(s):_ `vqsub.s8 Q0, Q0, Q0'
31439
31440   * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t)
31441     _Form of expected instruction(s):_ `vqsub.u64 Q0, Q0, Q0'
31442
31443   * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t)
31444     _Form of expected instruction(s):_ `vqsub.s64 Q0, Q0, Q0'
31445
31446   * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t)
31447     _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0'
31448
31449   * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t)
31450     _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0'
31451
31452   * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t)
31453     _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0'
31454
31455   * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t)
31456     _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0'
31457
31458   * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t)
31459     _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0'
31460
31461   * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t)
31462     _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0'
31463
31464   * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t)
31465     _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0'
31466
31467   * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t)
31468     _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0'
31469
31470   * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t)
31471     _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0'
31472
31473   * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t)
31474     _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0'
31475
31476   * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t)
31477     _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0'
31478
31479   * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t)
31480     _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0'
31481
314826.56.3.13 Comparison (equal-to)
31483...............................
31484
31485   * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t)
31486     _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0'
31487
31488   * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t)
31489     _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0'
31490
31491   * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t)
31492     _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
31493
31494   * uint32x2_t vceq_s32 (int32x2_t, int32x2_t)
31495     _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0'
31496
31497   * uint16x4_t vceq_s16 (int16x4_t, int16x4_t)
31498     _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0'
31499
31500   * uint8x8_t vceq_s8 (int8x8_t, int8x8_t)
31501     _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
31502
31503   * uint32x2_t vceq_f32 (float32x2_t, float32x2_t)
31504     _Form of expected instruction(s):_ `vceq.f32 D0, D0, D0'
31505
31506   * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t)
31507     _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
31508
31509   * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t)
31510     _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0'
31511
31512   * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t)
31513     _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0'
31514
31515   * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t)
31516     _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
31517
31518   * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t)
31519     _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0'
31520
31521   * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t)
31522     _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0'
31523
31524   * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t)
31525     _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
31526
31527   * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t)
31528     _Form of expected instruction(s):_ `vceq.f32 Q0, Q0, Q0'
31529
31530   * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t)
31531     _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
31532
315336.56.3.14 Comparison (greater-than-or-equal-to)
31534...............................................
31535
31536   * uint32x2_t vcge_s32 (int32x2_t, int32x2_t)
31537     _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0'
31538
31539   * uint16x4_t vcge_s16 (int16x4_t, int16x4_t)
31540     _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0'
31541
31542   * uint8x8_t vcge_s8 (int8x8_t, int8x8_t)
31543     _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0'
31544
31545   * uint32x2_t vcge_f32 (float32x2_t, float32x2_t)
31546     _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0'
31547
31548   * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t)
31549     _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0'
31550
31551   * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t)
31552     _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0'
31553
31554   * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t)
31555     _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0'
31556
31557   * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t)
31558     _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0'
31559
31560   * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t)
31561     _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0'
31562
31563   * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t)
31564     _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0'
31565
31566   * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t)
31567     _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0'
31568
31569   * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t)
31570     _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0'
31571
31572   * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t)
31573     _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0'
31574
31575   * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t)
31576     _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0'
31577
315786.56.3.15 Comparison (less-than-or-equal-to)
31579............................................
31580
31581   * uint32x2_t vcle_s32 (int32x2_t, int32x2_t)
31582     _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0'
31583
31584   * uint16x4_t vcle_s16 (int16x4_t, int16x4_t)
31585     _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0'
31586
31587   * uint8x8_t vcle_s8 (int8x8_t, int8x8_t)
31588     _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0'
31589
31590   * uint32x2_t vcle_f32 (float32x2_t, float32x2_t)
31591     _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0'
31592
31593   * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t)
31594     _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0'
31595
31596   * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t)
31597     _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0'
31598
31599   * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t)
31600     _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0'
31601
31602   * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t)
31603     _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0'
31604
31605   * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t)
31606     _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0'
31607
31608   * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t)
31609     _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0'
31610
31611   * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t)
31612     _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0'
31613
31614   * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t)
31615     _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0'
31616
31617   * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t)
31618     _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0'
31619
31620   * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t)
31621     _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0'
31622
316236.56.3.16 Comparison (greater-than)
31624...................................
31625
31626   * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t)
31627     _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0'
31628
31629   * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t)
31630     _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0'
31631
31632   * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t)
31633     _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0'
31634
31635   * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t)
31636     _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0'
31637
31638   * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t)
31639     _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0'
31640
31641   * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t)
31642     _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0'
31643
31644   * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t)
31645     _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0'
31646
31647   * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t)
31648     _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0'
31649
31650   * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t)
31651     _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0'
31652
31653   * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t)
31654     _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0'
31655
31656   * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t)
31657     _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0'
31658
31659   * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t)
31660     _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0'
31661
31662   * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t)
31663     _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0'
31664
31665   * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t)
31666     _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0'
31667
316686.56.3.17 Comparison (less-than)
31669................................
31670
31671   * uint32x2_t vclt_s32 (int32x2_t, int32x2_t)
31672     _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0'
31673
31674   * uint16x4_t vclt_s16 (int16x4_t, int16x4_t)
31675     _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0'
31676
31677   * uint8x8_t vclt_s8 (int8x8_t, int8x8_t)
31678     _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0'
31679
31680   * uint32x2_t vclt_f32 (float32x2_t, float32x2_t)
31681     _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0'
31682
31683   * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t)
31684     _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0'
31685
31686   * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t)
31687     _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0'
31688
31689   * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t)
31690     _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0'
31691
31692   * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t)
31693     _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0'
31694
31695   * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t)
31696     _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0'
31697
31698   * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t)
31699     _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0'
31700
31701   * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t)
31702     _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0'
31703
31704   * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t)
31705     _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0'
31706
31707   * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t)
31708     _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0'
31709
31710   * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t)
31711     _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0'
31712
317136.56.3.18 Comparison (absolute greater-than-or-equal-to)
31714........................................................
31715
31716   * uint32x2_t vcage_f32 (float32x2_t, float32x2_t)
31717     _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0'
31718
31719   * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t)
31720     _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0'
31721
317226.56.3.19 Comparison (absolute less-than-or-equal-to)
31723.....................................................
31724
31725   * uint32x2_t vcale_f32 (float32x2_t, float32x2_t)
31726     _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0'
31727
31728   * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t)
31729     _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0'
31730
317316.56.3.20 Comparison (absolute greater-than)
31732............................................
31733
31734   * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t)
31735     _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0'
31736
31737   * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t)
31738     _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0'
31739
317406.56.3.21 Comparison (absolute less-than)
31741.........................................
31742
31743   * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t)
31744     _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0'
31745
31746   * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t)
31747     _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0'
31748
317496.56.3.22 Test bits
31750...................
31751
31752   * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t)
31753     _Form of expected instruction(s):_ `vtst.32 D0, D0, D0'
31754
31755   * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t)
31756     _Form of expected instruction(s):_ `vtst.16 D0, D0, D0'
31757
31758   * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t)
31759     _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
31760
31761   * uint32x2_t vtst_s32 (int32x2_t, int32x2_t)
31762     _Form of expected instruction(s):_ `vtst.32 D0, D0, D0'
31763
31764   * uint16x4_t vtst_s16 (int16x4_t, int16x4_t)
31765     _Form of expected instruction(s):_ `vtst.16 D0, D0, D0'
31766
31767   * uint8x8_t vtst_s8 (int8x8_t, int8x8_t)
31768     _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
31769
31770   * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t)
31771     _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
31772
31773   * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t)
31774     _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0'
31775
31776   * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t)
31777     _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0'
31778
31779   * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t)
31780     _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
31781
31782   * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t)
31783     _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0'
31784
31785   * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t)
31786     _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0'
31787
31788   * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t)
31789     _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
31790
31791   * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t)
31792     _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
31793
317946.56.3.23 Absolute difference
31795.............................
31796
31797   * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t)
31798     _Form of expected instruction(s):_ `vabd.u32 D0, D0, D0'
31799
31800   * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t)
31801     _Form of expected instruction(s):_ `vabd.u16 D0, D0, D0'
31802
31803   * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t)
31804     _Form of expected instruction(s):_ `vabd.u8 D0, D0, D0'
31805
31806   * int32x2_t vabd_s32 (int32x2_t, int32x2_t)
31807     _Form of expected instruction(s):_ `vabd.s32 D0, D0, D0'
31808
31809   * int16x4_t vabd_s16 (int16x4_t, int16x4_t)
31810     _Form of expected instruction(s):_ `vabd.s16 D0, D0, D0'
31811
31812   * int8x8_t vabd_s8 (int8x8_t, int8x8_t)
31813     _Form of expected instruction(s):_ `vabd.s8 D0, D0, D0'
31814
31815   * float32x2_t vabd_f32 (float32x2_t, float32x2_t)
31816     _Form of expected instruction(s):_ `vabd.f32 D0, D0, D0'
31817
31818   * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t)
31819     _Form of expected instruction(s):_ `vabd.u32 Q0, Q0, Q0'
31820
31821   * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t)
31822     _Form of expected instruction(s):_ `vabd.u16 Q0, Q0, Q0'
31823
31824   * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t)
31825     _Form of expected instruction(s):_ `vabd.u8 Q0, Q0, Q0'
31826
31827   * int32x4_t vabdq_s32 (int32x4_t, int32x4_t)
31828     _Form of expected instruction(s):_ `vabd.s32 Q0, Q0, Q0'
31829
31830   * int16x8_t vabdq_s16 (int16x8_t, int16x8_t)
31831     _Form of expected instruction(s):_ `vabd.s16 Q0, Q0, Q0'
31832
31833   * int8x16_t vabdq_s8 (int8x16_t, int8x16_t)
31834     _Form of expected instruction(s):_ `vabd.s8 Q0, Q0, Q0'
31835
31836   * float32x4_t vabdq_f32 (float32x4_t, float32x4_t)
31837     _Form of expected instruction(s):_ `vabd.f32 Q0, Q0, Q0'
31838
31839   * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t)
31840     _Form of expected instruction(s):_ `vabdl.u32 Q0, D0, D0'
31841
31842   * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t)
31843     _Form of expected instruction(s):_ `vabdl.u16 Q0, D0, D0'
31844
31845   * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t)
31846     _Form of expected instruction(s):_ `vabdl.u8 Q0, D0, D0'
31847
31848   * int64x2_t vabdl_s32 (int32x2_t, int32x2_t)
31849     _Form of expected instruction(s):_ `vabdl.s32 Q0, D0, D0'
31850
31851   * int32x4_t vabdl_s16 (int16x4_t, int16x4_t)
31852     _Form of expected instruction(s):_ `vabdl.s16 Q0, D0, D0'
31853
31854   * int16x8_t vabdl_s8 (int8x8_t, int8x8_t)
31855     _Form of expected instruction(s):_ `vabdl.s8 Q0, D0, D0'
31856
318576.56.3.24 Absolute difference and accumulate
31858............................................
31859
31860   * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
31861     _Form of expected instruction(s):_ `vaba.u32 D0, D0, D0'
31862
31863   * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
31864     _Form of expected instruction(s):_ `vaba.u16 D0, D0, D0'
31865
31866   * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
31867     _Form of expected instruction(s):_ `vaba.u8 D0, D0, D0'
31868
31869   * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t)
31870     _Form of expected instruction(s):_ `vaba.s32 D0, D0, D0'
31871
31872   * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t)
31873     _Form of expected instruction(s):_ `vaba.s16 D0, D0, D0'
31874
31875   * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t)
31876     _Form of expected instruction(s):_ `vaba.s8 D0, D0, D0'
31877
31878   * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
31879     _Form of expected instruction(s):_ `vaba.u32 Q0, Q0, Q0'
31880
31881   * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
31882     _Form of expected instruction(s):_ `vaba.u16 Q0, Q0, Q0'
31883
31884   * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
31885     _Form of expected instruction(s):_ `vaba.u8 Q0, Q0, Q0'
31886
31887   * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t)
31888     _Form of expected instruction(s):_ `vaba.s32 Q0, Q0, Q0'
31889
31890   * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t)
31891     _Form of expected instruction(s):_ `vaba.s16 Q0, Q0, Q0'
31892
31893   * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t)
31894     _Form of expected instruction(s):_ `vaba.s8 Q0, Q0, Q0'
31895
31896   * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
31897     _Form of expected instruction(s):_ `vabal.u32 Q0, D0, D0'
31898
31899   * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
31900     _Form of expected instruction(s):_ `vabal.u16 Q0, D0, D0'
31901
31902   * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
31903     _Form of expected instruction(s):_ `vabal.u8 Q0, D0, D0'
31904
31905   * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t)
31906     _Form of expected instruction(s):_ `vabal.s32 Q0, D0, D0'
31907
31908   * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t)
31909     _Form of expected instruction(s):_ `vabal.s16 Q0, D0, D0'
31910
31911   * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t)
31912     _Form of expected instruction(s):_ `vabal.s8 Q0, D0, D0'
31913
319146.56.3.25 Maximum
31915.................
31916
31917   * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t)
31918     _Form of expected instruction(s):_ `vmax.u32 D0, D0, D0'
31919
31920   * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t)
31921     _Form of expected instruction(s):_ `vmax.u16 D0, D0, D0'
31922
31923   * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t)
31924     _Form of expected instruction(s):_ `vmax.u8 D0, D0, D0'
31925
31926   * int32x2_t vmax_s32 (int32x2_t, int32x2_t)
31927     _Form of expected instruction(s):_ `vmax.s32 D0, D0, D0'
31928
31929   * int16x4_t vmax_s16 (int16x4_t, int16x4_t)
31930     _Form of expected instruction(s):_ `vmax.s16 D0, D0, D0'
31931
31932   * int8x8_t vmax_s8 (int8x8_t, int8x8_t)
31933     _Form of expected instruction(s):_ `vmax.s8 D0, D0, D0'
31934
31935   * float32x2_t vmax_f32 (float32x2_t, float32x2_t)
31936     _Form of expected instruction(s):_ `vmax.f32 D0, D0, D0'
31937
31938   * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t)
31939     _Form of expected instruction(s):_ `vmax.u32 Q0, Q0, Q0'
31940
31941   * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t)
31942     _Form of expected instruction(s):_ `vmax.u16 Q0, Q0, Q0'
31943
31944   * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t)
31945     _Form of expected instruction(s):_ `vmax.u8 Q0, Q0, Q0'
31946
31947   * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t)
31948     _Form of expected instruction(s):_ `vmax.s32 Q0, Q0, Q0'
31949
31950   * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t)
31951     _Form of expected instruction(s):_ `vmax.s16 Q0, Q0, Q0'
31952
31953   * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t)
31954     _Form of expected instruction(s):_ `vmax.s8 Q0, Q0, Q0'
31955
31956   * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t)
31957     _Form of expected instruction(s):_ `vmax.f32 Q0, Q0, Q0'
31958
319596.56.3.26 Minimum
31960.................
31961
31962   * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t)
31963     _Form of expected instruction(s):_ `vmin.u32 D0, D0, D0'
31964
31965   * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t)
31966     _Form of expected instruction(s):_ `vmin.u16 D0, D0, D0'
31967
31968   * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t)
31969     _Form of expected instruction(s):_ `vmin.u8 D0, D0, D0'
31970
31971   * int32x2_t vmin_s32 (int32x2_t, int32x2_t)
31972     _Form of expected instruction(s):_ `vmin.s32 D0, D0, D0'
31973
31974   * int16x4_t vmin_s16 (int16x4_t, int16x4_t)
31975     _Form of expected instruction(s):_ `vmin.s16 D0, D0, D0'
31976
31977   * int8x8_t vmin_s8 (int8x8_t, int8x8_t)
31978     _Form of expected instruction(s):_ `vmin.s8 D0, D0, D0'
31979
31980   * float32x2_t vmin_f32 (float32x2_t, float32x2_t)
31981     _Form of expected instruction(s):_ `vmin.f32 D0, D0, D0'
31982
31983   * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t)
31984     _Form of expected instruction(s):_ `vmin.u32 Q0, Q0, Q0'
31985
31986   * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t)
31987     _Form of expected instruction(s):_ `vmin.u16 Q0, Q0, Q0'
31988
31989   * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t)
31990     _Form of expected instruction(s):_ `vmin.u8 Q0, Q0, Q0'
31991
31992   * int32x4_t vminq_s32 (int32x4_t, int32x4_t)
31993     _Form of expected instruction(s):_ `vmin.s32 Q0, Q0, Q0'
31994
31995   * int16x8_t vminq_s16 (int16x8_t, int16x8_t)
31996     _Form of expected instruction(s):_ `vmin.s16 Q0, Q0, Q0'
31997
31998   * int8x16_t vminq_s8 (int8x16_t, int8x16_t)
31999     _Form of expected instruction(s):_ `vmin.s8 Q0, Q0, Q0'
32000
32001   * float32x4_t vminq_f32 (float32x4_t, float32x4_t)
32002     _Form of expected instruction(s):_ `vmin.f32 Q0, Q0, Q0'
32003
320046.56.3.27 Pairwise add
32005......................
32006
32007   * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t)
32008     _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0'
32009
32010   * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t)
32011     _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0'
32012
32013   * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t)
32014     _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0'
32015
32016   * int32x2_t vpadd_s32 (int32x2_t, int32x2_t)
32017     _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0'
32018
32019   * int16x4_t vpadd_s16 (int16x4_t, int16x4_t)
32020     _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0'
32021
32022   * int8x8_t vpadd_s8 (int8x8_t, int8x8_t)
32023     _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0'
32024
32025   * float32x2_t vpadd_f32 (float32x2_t, float32x2_t)
32026     _Form of expected instruction(s):_ `vpadd.f32 D0, D0, D0'
32027
32028   * uint64x1_t vpaddl_u32 (uint32x2_t)
32029     _Form of expected instruction(s):_ `vpaddl.u32 D0, D0'
32030
32031   * uint32x2_t vpaddl_u16 (uint16x4_t)
32032     _Form of expected instruction(s):_ `vpaddl.u16 D0, D0'
32033
32034   * uint16x4_t vpaddl_u8 (uint8x8_t)
32035     _Form of expected instruction(s):_ `vpaddl.u8 D0, D0'
32036
32037   * int64x1_t vpaddl_s32 (int32x2_t)
32038     _Form of expected instruction(s):_ `vpaddl.s32 D0, D0'
32039
32040   * int32x2_t vpaddl_s16 (int16x4_t)
32041     _Form of expected instruction(s):_ `vpaddl.s16 D0, D0'
32042
32043   * int16x4_t vpaddl_s8 (int8x8_t)
32044     _Form of expected instruction(s):_ `vpaddl.s8 D0, D0'
32045
32046   * uint64x2_t vpaddlq_u32 (uint32x4_t)
32047     _Form of expected instruction(s):_ `vpaddl.u32 Q0, Q0'
32048
32049   * uint32x4_t vpaddlq_u16 (uint16x8_t)
32050     _Form of expected instruction(s):_ `vpaddl.u16 Q0, Q0'
32051
32052   * uint16x8_t vpaddlq_u8 (uint8x16_t)
32053     _Form of expected instruction(s):_ `vpaddl.u8 Q0, Q0'
32054
32055   * int64x2_t vpaddlq_s32 (int32x4_t)
32056     _Form of expected instruction(s):_ `vpaddl.s32 Q0, Q0'
32057
32058   * int32x4_t vpaddlq_s16 (int16x8_t)
32059     _Form of expected instruction(s):_ `vpaddl.s16 Q0, Q0'
32060
32061   * int16x8_t vpaddlq_s8 (int8x16_t)
32062     _Form of expected instruction(s):_ `vpaddl.s8 Q0, Q0'
32063
320646.56.3.28 Pairwise add, single_opcode widen and accumulate
32065..........................................................
32066
32067   * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t)
32068     _Form of expected instruction(s):_ `vpadal.u32 D0, D0'
32069
32070   * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t)
32071     _Form of expected instruction(s):_ `vpadal.u16 D0, D0'
32072
32073   * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t)
32074     _Form of expected instruction(s):_ `vpadal.u8 D0, D0'
32075
32076   * int64x1_t vpadal_s32 (int64x1_t, int32x2_t)
32077     _Form of expected instruction(s):_ `vpadal.s32 D0, D0'
32078
32079   * int32x2_t vpadal_s16 (int32x2_t, int16x4_t)
32080     _Form of expected instruction(s):_ `vpadal.s16 D0, D0'
32081
32082   * int16x4_t vpadal_s8 (int16x4_t, int8x8_t)
32083     _Form of expected instruction(s):_ `vpadal.s8 D0, D0'
32084
32085   * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t)
32086     _Form of expected instruction(s):_ `vpadal.u32 Q0, Q0'
32087
32088   * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t)
32089     _Form of expected instruction(s):_ `vpadal.u16 Q0, Q0'
32090
32091   * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t)
32092     _Form of expected instruction(s):_ `vpadal.u8 Q0, Q0'
32093
32094   * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t)
32095     _Form of expected instruction(s):_ `vpadal.s32 Q0, Q0'
32096
32097   * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t)
32098     _Form of expected instruction(s):_ `vpadal.s16 Q0, Q0'
32099
32100   * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t)
32101     _Form of expected instruction(s):_ `vpadal.s8 Q0, Q0'
32102
321036.56.3.29 Folding maximum
32104.........................
32105
32106   * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t)
32107     _Form of expected instruction(s):_ `vpmax.u32 D0, D0, D0'
32108
32109   * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t)
32110     _Form of expected instruction(s):_ `vpmax.u16 D0, D0, D0'
32111
32112   * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t)
32113     _Form of expected instruction(s):_ `vpmax.u8 D0, D0, D0'
32114
32115   * int32x2_t vpmax_s32 (int32x2_t, int32x2_t)
32116     _Form of expected instruction(s):_ `vpmax.s32 D0, D0, D0'
32117
32118   * int16x4_t vpmax_s16 (int16x4_t, int16x4_t)
32119     _Form of expected instruction(s):_ `vpmax.s16 D0, D0, D0'
32120
32121   * int8x8_t vpmax_s8 (int8x8_t, int8x8_t)
32122     _Form of expected instruction(s):_ `vpmax.s8 D0, D0, D0'
32123
32124   * float32x2_t vpmax_f32 (float32x2_t, float32x2_t)
32125     _Form of expected instruction(s):_ `vpmax.f32 D0, D0, D0'
32126
321276.56.3.30 Folding minimum
32128.........................
32129
32130   * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t)
32131     _Form of expected instruction(s):_ `vpmin.u32 D0, D0, D0'
32132
32133   * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t)
32134     _Form of expected instruction(s):_ `vpmin.u16 D0, D0, D0'
32135
32136   * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t)
32137     _Form of expected instruction(s):_ `vpmin.u8 D0, D0, D0'
32138
32139   * int32x2_t vpmin_s32 (int32x2_t, int32x2_t)
32140     _Form of expected instruction(s):_ `vpmin.s32 D0, D0, D0'
32141
32142   * int16x4_t vpmin_s16 (int16x4_t, int16x4_t)
32143     _Form of expected instruction(s):_ `vpmin.s16 D0, D0, D0'
32144
32145   * int8x8_t vpmin_s8 (int8x8_t, int8x8_t)
32146     _Form of expected instruction(s):_ `vpmin.s8 D0, D0, D0'
32147
32148   * float32x2_t vpmin_f32 (float32x2_t, float32x2_t)
32149     _Form of expected instruction(s):_ `vpmin.f32 D0, D0, D0'
32150
321516.56.3.31 Reciprocal step
32152.........................
32153
32154   * float32x2_t vrecps_f32 (float32x2_t, float32x2_t)
32155     _Form of expected instruction(s):_ `vrecps.f32 D0, D0, D0'
32156
32157   * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t)
32158     _Form of expected instruction(s):_ `vrecps.f32 Q0, Q0, Q0'
32159
32160   * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t)
32161     _Form of expected instruction(s):_ `vrsqrts.f32 D0, D0, D0'
32162
32163   * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t)
32164     _Form of expected instruction(s):_ `vrsqrts.f32 Q0, Q0, Q0'
32165
321666.56.3.32 Vector shift left
32167...........................
32168
32169   * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t)
32170     _Form of expected instruction(s):_ `vshl.u32 D0, D0, D0'
32171
32172   * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t)
32173     _Form of expected instruction(s):_ `vshl.u16 D0, D0, D0'
32174
32175   * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t)
32176     _Form of expected instruction(s):_ `vshl.u8 D0, D0, D0'
32177
32178   * int32x2_t vshl_s32 (int32x2_t, int32x2_t)
32179     _Form of expected instruction(s):_ `vshl.s32 D0, D0, D0'
32180
32181   * int16x4_t vshl_s16 (int16x4_t, int16x4_t)
32182     _Form of expected instruction(s):_ `vshl.s16 D0, D0, D0'
32183
32184   * int8x8_t vshl_s8 (int8x8_t, int8x8_t)
32185     _Form of expected instruction(s):_ `vshl.s8 D0, D0, D0'
32186
32187   * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t)
32188     _Form of expected instruction(s):_ `vshl.u64 D0, D0, D0'
32189
32190   * int64x1_t vshl_s64 (int64x1_t, int64x1_t)
32191     _Form of expected instruction(s):_ `vshl.s64 D0, D0, D0'
32192
32193   * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t)
32194     _Form of expected instruction(s):_ `vshl.u32 Q0, Q0, Q0'
32195
32196   * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t)
32197     _Form of expected instruction(s):_ `vshl.u16 Q0, Q0, Q0'
32198
32199   * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t)
32200     _Form of expected instruction(s):_ `vshl.u8 Q0, Q0, Q0'
32201
32202   * int32x4_t vshlq_s32 (int32x4_t, int32x4_t)
32203     _Form of expected instruction(s):_ `vshl.s32 Q0, Q0, Q0'
32204
32205   * int16x8_t vshlq_s16 (int16x8_t, int16x8_t)
32206     _Form of expected instruction(s):_ `vshl.s16 Q0, Q0, Q0'
32207
32208   * int8x16_t vshlq_s8 (int8x16_t, int8x16_t)
32209     _Form of expected instruction(s):_ `vshl.s8 Q0, Q0, Q0'
32210
32211   * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t)
32212     _Form of expected instruction(s):_ `vshl.u64 Q0, Q0, Q0'
32213
32214   * int64x2_t vshlq_s64 (int64x2_t, int64x2_t)
32215     _Form of expected instruction(s):_ `vshl.s64 Q0, Q0, Q0'
32216
32217   * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t)
32218     _Form of expected instruction(s):_ `vrshl.u32 D0, D0, D0'
32219
32220   * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t)
32221     _Form of expected instruction(s):_ `vrshl.u16 D0, D0, D0'
32222
32223   * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t)
32224     _Form of expected instruction(s):_ `vrshl.u8 D0, D0, D0'
32225
32226   * int32x2_t vrshl_s32 (int32x2_t, int32x2_t)
32227     _Form of expected instruction(s):_ `vrshl.s32 D0, D0, D0'
32228
32229   * int16x4_t vrshl_s16 (int16x4_t, int16x4_t)
32230     _Form of expected instruction(s):_ `vrshl.s16 D0, D0, D0'
32231
32232   * int8x8_t vrshl_s8 (int8x8_t, int8x8_t)
32233     _Form of expected instruction(s):_ `vrshl.s8 D0, D0, D0'
32234
32235   * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t)
32236     _Form of expected instruction(s):_ `vrshl.u64 D0, D0, D0'
32237
32238   * int64x1_t vrshl_s64 (int64x1_t, int64x1_t)
32239     _Form of expected instruction(s):_ `vrshl.s64 D0, D0, D0'
32240
32241   * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t)
32242     _Form of expected instruction(s):_ `vrshl.u32 Q0, Q0, Q0'
32243
32244   * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t)
32245     _Form of expected instruction(s):_ `vrshl.u16 Q0, Q0, Q0'
32246
32247   * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t)
32248     _Form of expected instruction(s):_ `vrshl.u8 Q0, Q0, Q0'
32249
32250   * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t)
32251     _Form of expected instruction(s):_ `vrshl.s32 Q0, Q0, Q0'
32252
32253   * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t)
32254     _Form of expected instruction(s):_ `vrshl.s16 Q0, Q0, Q0'
32255
32256   * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t)
32257     _Form of expected instruction(s):_ `vrshl.s8 Q0, Q0, Q0'
32258
32259   * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t)
32260     _Form of expected instruction(s):_ `vrshl.u64 Q0, Q0, Q0'
32261
32262   * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t)
32263     _Form of expected instruction(s):_ `vrshl.s64 Q0, Q0, Q0'
32264
32265   * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t)
32266     _Form of expected instruction(s):_ `vqshl.u32 D0, D0, D0'
32267
32268   * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t)
32269     _Form of expected instruction(s):_ `vqshl.u16 D0, D0, D0'
32270
32271   * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t)
32272     _Form of expected instruction(s):_ `vqshl.u8 D0, D0, D0'
32273
32274   * int32x2_t vqshl_s32 (int32x2_t, int32x2_t)
32275     _Form of expected instruction(s):_ `vqshl.s32 D0, D0, D0'
32276
32277   * int16x4_t vqshl_s16 (int16x4_t, int16x4_t)
32278     _Form of expected instruction(s):_ `vqshl.s16 D0, D0, D0'
32279
32280   * int8x8_t vqshl_s8 (int8x8_t, int8x8_t)
32281     _Form of expected instruction(s):_ `vqshl.s8 D0, D0, D0'
32282
32283   * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t)
32284     _Form of expected instruction(s):_ `vqshl.u64 D0, D0, D0'
32285
32286   * int64x1_t vqshl_s64 (int64x1_t, int64x1_t)
32287     _Form of expected instruction(s):_ `vqshl.s64 D0, D0, D0'
32288
32289   * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t)
32290     _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, Q0'
32291
32292   * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t)
32293     _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, Q0'
32294
32295   * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t)
32296     _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, Q0'
32297
32298   * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t)
32299     _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, Q0'
32300
32301   * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t)
32302     _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, Q0'
32303
32304   * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t)
32305     _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, Q0'
32306
32307   * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t)
32308     _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, Q0'
32309
32310   * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t)
32311     _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, Q0'
32312
32313   * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t)
32314     _Form of expected instruction(s):_ `vqrshl.u32 D0, D0, D0'
32315
32316   * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t)
32317     _Form of expected instruction(s):_ `vqrshl.u16 D0, D0, D0'
32318
32319   * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t)
32320     _Form of expected instruction(s):_ `vqrshl.u8 D0, D0, D0'
32321
32322   * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t)
32323     _Form of expected instruction(s):_ `vqrshl.s32 D0, D0, D0'
32324
32325   * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t)
32326     _Form of expected instruction(s):_ `vqrshl.s16 D0, D0, D0'
32327
32328   * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t)
32329     _Form of expected instruction(s):_ `vqrshl.s8 D0, D0, D0'
32330
32331   * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t)
32332     _Form of expected instruction(s):_ `vqrshl.u64 D0, D0, D0'
32333
32334   * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t)
32335     _Form of expected instruction(s):_ `vqrshl.s64 D0, D0, D0'
32336
32337   * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t)
32338     _Form of expected instruction(s):_ `vqrshl.u32 Q0, Q0, Q0'
32339
32340   * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t)
32341     _Form of expected instruction(s):_ `vqrshl.u16 Q0, Q0, Q0'
32342
32343   * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t)
32344     _Form of expected instruction(s):_ `vqrshl.u8 Q0, Q0, Q0'
32345
32346   * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t)
32347     _Form of expected instruction(s):_ `vqrshl.s32 Q0, Q0, Q0'
32348
32349   * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t)
32350     _Form of expected instruction(s):_ `vqrshl.s16 Q0, Q0, Q0'
32351
32352   * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t)
32353     _Form of expected instruction(s):_ `vqrshl.s8 Q0, Q0, Q0'
32354
32355   * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t)
32356     _Form of expected instruction(s):_ `vqrshl.u64 Q0, Q0, Q0'
32357
32358   * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t)
32359     _Form of expected instruction(s):_ `vqrshl.s64 Q0, Q0, Q0'
32360
323616.56.3.33 Vector shift left by constant
32362.......................................
32363
32364   * uint32x2_t vshl_n_u32 (uint32x2_t, const int)
32365     _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0'
32366
32367   * uint16x4_t vshl_n_u16 (uint16x4_t, const int)
32368     _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0'
32369
32370   * uint8x8_t vshl_n_u8 (uint8x8_t, const int)
32371     _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0'
32372
32373   * int32x2_t vshl_n_s32 (int32x2_t, const int)
32374     _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0'
32375
32376   * int16x4_t vshl_n_s16 (int16x4_t, const int)
32377     _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0'
32378
32379   * int8x8_t vshl_n_s8 (int8x8_t, const int)
32380     _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0'
32381
32382   * uint64x1_t vshl_n_u64 (uint64x1_t, const int)
32383     _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0'
32384
32385   * int64x1_t vshl_n_s64 (int64x1_t, const int)
32386     _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0'
32387
32388   * uint32x4_t vshlq_n_u32 (uint32x4_t, const int)
32389     _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0'
32390
32391   * uint16x8_t vshlq_n_u16 (uint16x8_t, const int)
32392     _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0'
32393
32394   * uint8x16_t vshlq_n_u8 (uint8x16_t, const int)
32395     _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0'
32396
32397   * int32x4_t vshlq_n_s32 (int32x4_t, const int)
32398     _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0'
32399
32400   * int16x8_t vshlq_n_s16 (int16x8_t, const int)
32401     _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0'
32402
32403   * int8x16_t vshlq_n_s8 (int8x16_t, const int)
32404     _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0'
32405
32406   * uint64x2_t vshlq_n_u64 (uint64x2_t, const int)
32407     _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0'
32408
32409   * int64x2_t vshlq_n_s64 (int64x2_t, const int)
32410     _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0'
32411
32412   * uint32x2_t vqshl_n_u32 (uint32x2_t, const int)
32413     _Form of expected instruction(s):_ `vqshl.u32 D0, D0, #0'
32414
32415   * uint16x4_t vqshl_n_u16 (uint16x4_t, const int)
32416     _Form of expected instruction(s):_ `vqshl.u16 D0, D0, #0'
32417
32418   * uint8x8_t vqshl_n_u8 (uint8x8_t, const int)
32419     _Form of expected instruction(s):_ `vqshl.u8 D0, D0, #0'
32420
32421   * int32x2_t vqshl_n_s32 (int32x2_t, const int)
32422     _Form of expected instruction(s):_ `vqshl.s32 D0, D0, #0'
32423
32424   * int16x4_t vqshl_n_s16 (int16x4_t, const int)
32425     _Form of expected instruction(s):_ `vqshl.s16 D0, D0, #0'
32426
32427   * int8x8_t vqshl_n_s8 (int8x8_t, const int)
32428     _Form of expected instruction(s):_ `vqshl.s8 D0, D0, #0'
32429
32430   * uint64x1_t vqshl_n_u64 (uint64x1_t, const int)
32431     _Form of expected instruction(s):_ `vqshl.u64 D0, D0, #0'
32432
32433   * int64x1_t vqshl_n_s64 (int64x1_t, const int)
32434     _Form of expected instruction(s):_ `vqshl.s64 D0, D0, #0'
32435
32436   * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int)
32437     _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, #0'
32438
32439   * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int)
32440     _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, #0'
32441
32442   * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int)
32443     _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, #0'
32444
32445   * int32x4_t vqshlq_n_s32 (int32x4_t, const int)
32446     _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, #0'
32447
32448   * int16x8_t vqshlq_n_s16 (int16x8_t, const int)
32449     _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, #0'
32450
32451   * int8x16_t vqshlq_n_s8 (int8x16_t, const int)
32452     _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, #0'
32453
32454   * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int)
32455     _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, #0'
32456
32457   * int64x2_t vqshlq_n_s64 (int64x2_t, const int)
32458     _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, #0'
32459
32460   * uint64x1_t vqshlu_n_s64 (int64x1_t, const int)
32461     _Form of expected instruction(s):_ `vqshlu.s64 D0, D0, #0'
32462
32463   * uint32x2_t vqshlu_n_s32 (int32x2_t, const int)
32464     _Form of expected instruction(s):_ `vqshlu.s32 D0, D0, #0'
32465
32466   * uint16x4_t vqshlu_n_s16 (int16x4_t, const int)
32467     _Form of expected instruction(s):_ `vqshlu.s16 D0, D0, #0'
32468
32469   * uint8x8_t vqshlu_n_s8 (int8x8_t, const int)
32470     _Form of expected instruction(s):_ `vqshlu.s8 D0, D0, #0'
32471
32472   * uint64x2_t vqshluq_n_s64 (int64x2_t, const int)
32473     _Form of expected instruction(s):_ `vqshlu.s64 Q0, Q0, #0'
32474
32475   * uint32x4_t vqshluq_n_s32 (int32x4_t, const int)
32476     _Form of expected instruction(s):_ `vqshlu.s32 Q0, Q0, #0'
32477
32478   * uint16x8_t vqshluq_n_s16 (int16x8_t, const int)
32479     _Form of expected instruction(s):_ `vqshlu.s16 Q0, Q0, #0'
32480
32481   * uint8x16_t vqshluq_n_s8 (int8x16_t, const int)
32482     _Form of expected instruction(s):_ `vqshlu.s8 Q0, Q0, #0'
32483
32484   * uint64x2_t vshll_n_u32 (uint32x2_t, const int)
32485     _Form of expected instruction(s):_ `vshll.u32 Q0, D0, #0'
32486
32487   * uint32x4_t vshll_n_u16 (uint16x4_t, const int)
32488     _Form of expected instruction(s):_ `vshll.u16 Q0, D0, #0'
32489
32490   * uint16x8_t vshll_n_u8 (uint8x8_t, const int)
32491     _Form of expected instruction(s):_ `vshll.u8 Q0, D0, #0'
32492
32493   * int64x2_t vshll_n_s32 (int32x2_t, const int)
32494     _Form of expected instruction(s):_ `vshll.s32 Q0, D0, #0'
32495
32496   * int32x4_t vshll_n_s16 (int16x4_t, const int)
32497     _Form of expected instruction(s):_ `vshll.s16 Q0, D0, #0'
32498
32499   * int16x8_t vshll_n_s8 (int8x8_t, const int)
32500     _Form of expected instruction(s):_ `vshll.s8 Q0, D0, #0'
32501
325026.56.3.34 Vector shift right by constant
32503........................................
32504
32505   * uint32x2_t vshr_n_u32 (uint32x2_t, const int)
32506     _Form of expected instruction(s):_ `vshr.u32 D0, D0, #0'
32507
32508   * uint16x4_t vshr_n_u16 (uint16x4_t, const int)
32509     _Form of expected instruction(s):_ `vshr.u16 D0, D0, #0'
32510
32511   * uint8x8_t vshr_n_u8 (uint8x8_t, const int)
32512     _Form of expected instruction(s):_ `vshr.u8 D0, D0, #0'
32513
32514   * int32x2_t vshr_n_s32 (int32x2_t, const int)
32515     _Form of expected instruction(s):_ `vshr.s32 D0, D0, #0'
32516
32517   * int16x4_t vshr_n_s16 (int16x4_t, const int)
32518     _Form of expected instruction(s):_ `vshr.s16 D0, D0, #0'
32519
32520   * int8x8_t vshr_n_s8 (int8x8_t, const int)
32521     _Form of expected instruction(s):_ `vshr.s8 D0, D0, #0'
32522
32523   * uint64x1_t vshr_n_u64 (uint64x1_t, const int)
32524     _Form of expected instruction(s):_ `vshr.u64 D0, D0, #0'
32525
32526   * int64x1_t vshr_n_s64 (int64x1_t, const int)
32527     _Form of expected instruction(s):_ `vshr.s64 D0, D0, #0'
32528
32529   * uint32x4_t vshrq_n_u32 (uint32x4_t, const int)
32530     _Form of expected instruction(s):_ `vshr.u32 Q0, Q0, #0'
32531
32532   * uint16x8_t vshrq_n_u16 (uint16x8_t, const int)
32533     _Form of expected instruction(s):_ `vshr.u16 Q0, Q0, #0'
32534
32535   * uint8x16_t vshrq_n_u8 (uint8x16_t, const int)
32536     _Form of expected instruction(s):_ `vshr.u8 Q0, Q0, #0'
32537
32538   * int32x4_t vshrq_n_s32 (int32x4_t, const int)
32539     _Form of expected instruction(s):_ `vshr.s32 Q0, Q0, #0'
32540
32541   * int16x8_t vshrq_n_s16 (int16x8_t, const int)
32542     _Form of expected instruction(s):_ `vshr.s16 Q0, Q0, #0'
32543
32544   * int8x16_t vshrq_n_s8 (int8x16_t, const int)
32545     _Form of expected instruction(s):_ `vshr.s8 Q0, Q0, #0'
32546
32547   * uint64x2_t vshrq_n_u64 (uint64x2_t, const int)
32548     _Form of expected instruction(s):_ `vshr.u64 Q0, Q0, #0'
32549
32550   * int64x2_t vshrq_n_s64 (int64x2_t, const int)
32551     _Form of expected instruction(s):_ `vshr.s64 Q0, Q0, #0'
32552
32553   * uint32x2_t vrshr_n_u32 (uint32x2_t, const int)
32554     _Form of expected instruction(s):_ `vrshr.u32 D0, D0, #0'
32555
32556   * uint16x4_t vrshr_n_u16 (uint16x4_t, const int)
32557     _Form of expected instruction(s):_ `vrshr.u16 D0, D0, #0'
32558
32559   * uint8x8_t vrshr_n_u8 (uint8x8_t, const int)
32560     _Form of expected instruction(s):_ `vrshr.u8 D0, D0, #0'
32561
32562   * int32x2_t vrshr_n_s32 (int32x2_t, const int)
32563     _Form of expected instruction(s):_ `vrshr.s32 D0, D0, #0'
32564
32565   * int16x4_t vrshr_n_s16 (int16x4_t, const int)
32566     _Form of expected instruction(s):_ `vrshr.s16 D0, D0, #0'
32567
32568   * int8x8_t vrshr_n_s8 (int8x8_t, const int)
32569     _Form of expected instruction(s):_ `vrshr.s8 D0, D0, #0'
32570
32571   * uint64x1_t vrshr_n_u64 (uint64x1_t, const int)
32572     _Form of expected instruction(s):_ `vrshr.u64 D0, D0, #0'
32573
32574   * int64x1_t vrshr_n_s64 (int64x1_t, const int)
32575     _Form of expected instruction(s):_ `vrshr.s64 D0, D0, #0'
32576
32577   * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int)
32578     _Form of expected instruction(s):_ `vrshr.u32 Q0, Q0, #0'
32579
32580   * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int)
32581     _Form of expected instruction(s):_ `vrshr.u16 Q0, Q0, #0'
32582
32583   * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int)
32584     _Form of expected instruction(s):_ `vrshr.u8 Q0, Q0, #0'
32585
32586   * int32x4_t vrshrq_n_s32 (int32x4_t, const int)
32587     _Form of expected instruction(s):_ `vrshr.s32 Q0, Q0, #0'
32588
32589   * int16x8_t vrshrq_n_s16 (int16x8_t, const int)
32590     _Form of expected instruction(s):_ `vrshr.s16 Q0, Q0, #0'
32591
32592   * int8x16_t vrshrq_n_s8 (int8x16_t, const int)
32593     _Form of expected instruction(s):_ `vrshr.s8 Q0, Q0, #0'
32594
32595   * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int)
32596     _Form of expected instruction(s):_ `vrshr.u64 Q0, Q0, #0'
32597
32598   * int64x2_t vrshrq_n_s64 (int64x2_t, const int)
32599     _Form of expected instruction(s):_ `vrshr.s64 Q0, Q0, #0'
32600
32601   * uint32x2_t vshrn_n_u64 (uint64x2_t, const int)
32602     _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0'
32603
32604   * uint16x4_t vshrn_n_u32 (uint32x4_t, const int)
32605     _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0'
32606
32607   * uint8x8_t vshrn_n_u16 (uint16x8_t, const int)
32608     _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0'
32609
32610   * int32x2_t vshrn_n_s64 (int64x2_t, const int)
32611     _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0'
32612
32613   * int16x4_t vshrn_n_s32 (int32x4_t, const int)
32614     _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0'
32615
32616   * int8x8_t vshrn_n_s16 (int16x8_t, const int)
32617     _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0'
32618
32619   * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int)
32620     _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0'
32621
32622   * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int)
32623     _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0'
32624
32625   * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int)
32626     _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0'
32627
32628   * int32x2_t vrshrn_n_s64 (int64x2_t, const int)
32629     _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0'
32630
32631   * int16x4_t vrshrn_n_s32 (int32x4_t, const int)
32632     _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0'
32633
32634   * int8x8_t vrshrn_n_s16 (int16x8_t, const int)
32635     _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0'
32636
32637   * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int)
32638     _Form of expected instruction(s):_ `vqshrn.u64 D0, Q0, #0'
32639
32640   * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int)
32641     _Form of expected instruction(s):_ `vqshrn.u32 D0, Q0, #0'
32642
32643   * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int)
32644     _Form of expected instruction(s):_ `vqshrn.u16 D0, Q0, #0'
32645
32646   * int32x2_t vqshrn_n_s64 (int64x2_t, const int)
32647     _Form of expected instruction(s):_ `vqshrn.s64 D0, Q0, #0'
32648
32649   * int16x4_t vqshrn_n_s32 (int32x4_t, const int)
32650     _Form of expected instruction(s):_ `vqshrn.s32 D0, Q0, #0'
32651
32652   * int8x8_t vqshrn_n_s16 (int16x8_t, const int)
32653     _Form of expected instruction(s):_ `vqshrn.s16 D0, Q0, #0'
32654
32655   * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int)
32656     _Form of expected instruction(s):_ `vqrshrn.u64 D0, Q0, #0'
32657
32658   * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int)
32659     _Form of expected instruction(s):_ `vqrshrn.u32 D0, Q0, #0'
32660
32661   * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int)
32662     _Form of expected instruction(s):_ `vqrshrn.u16 D0, Q0, #0'
32663
32664   * int32x2_t vqrshrn_n_s64 (int64x2_t, const int)
32665     _Form of expected instruction(s):_ `vqrshrn.s64 D0, Q0, #0'
32666
32667   * int16x4_t vqrshrn_n_s32 (int32x4_t, const int)
32668     _Form of expected instruction(s):_ `vqrshrn.s32 D0, Q0, #0'
32669
32670   * int8x8_t vqrshrn_n_s16 (int16x8_t, const int)
32671     _Form of expected instruction(s):_ `vqrshrn.s16 D0, Q0, #0'
32672
32673   * uint32x2_t vqshrun_n_s64 (int64x2_t, const int)
32674     _Form of expected instruction(s):_ `vqshrun.s64 D0, Q0, #0'
32675
32676   * uint16x4_t vqshrun_n_s32 (int32x4_t, const int)
32677     _Form of expected instruction(s):_ `vqshrun.s32 D0, Q0, #0'
32678
32679   * uint8x8_t vqshrun_n_s16 (int16x8_t, const int)
32680     _Form of expected instruction(s):_ `vqshrun.s16 D0, Q0, #0'
32681
32682   * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int)
32683     _Form of expected instruction(s):_ `vqrshrun.s64 D0, Q0, #0'
32684
32685   * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int)
32686     _Form of expected instruction(s):_ `vqrshrun.s32 D0, Q0, #0'
32687
32688   * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int)
32689     _Form of expected instruction(s):_ `vqrshrun.s16 D0, Q0, #0'
32690
326916.56.3.35 Vector shift right by constant and accumulate
32692.......................................................
32693
32694   * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int)
32695     _Form of expected instruction(s):_ `vsra.u32 D0, D0, #0'
32696
32697   * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int)
32698     _Form of expected instruction(s):_ `vsra.u16 D0, D0, #0'
32699
32700   * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int)
32701     _Form of expected instruction(s):_ `vsra.u8 D0, D0, #0'
32702
32703   * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int)
32704     _Form of expected instruction(s):_ `vsra.s32 D0, D0, #0'
32705
32706   * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int)
32707     _Form of expected instruction(s):_ `vsra.s16 D0, D0, #0'
32708
32709   * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int)
32710     _Form of expected instruction(s):_ `vsra.s8 D0, D0, #0'
32711
32712   * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int)
32713     _Form of expected instruction(s):_ `vsra.u64 D0, D0, #0'
32714
32715   * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int)
32716     _Form of expected instruction(s):_ `vsra.s64 D0, D0, #0'
32717
32718   * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
32719     _Form of expected instruction(s):_ `vsra.u32 Q0, Q0, #0'
32720
32721   * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
32722     _Form of expected instruction(s):_ `vsra.u16 Q0, Q0, #0'
32723
32724   * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
32725     _Form of expected instruction(s):_ `vsra.u8 Q0, Q0, #0'
32726
32727   * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int)
32728     _Form of expected instruction(s):_ `vsra.s32 Q0, Q0, #0'
32729
32730   * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int)
32731     _Form of expected instruction(s):_ `vsra.s16 Q0, Q0, #0'
32732
32733   * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int)
32734     _Form of expected instruction(s):_ `vsra.s8 Q0, Q0, #0'
32735
32736   * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
32737     _Form of expected instruction(s):_ `vsra.u64 Q0, Q0, #0'
32738
32739   * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int)
32740     _Form of expected instruction(s):_ `vsra.s64 Q0, Q0, #0'
32741
32742   * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int)
32743     _Form of expected instruction(s):_ `vrsra.u32 D0, D0, #0'
32744
32745   * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int)
32746     _Form of expected instruction(s):_ `vrsra.u16 D0, D0, #0'
32747
32748   * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int)
32749     _Form of expected instruction(s):_ `vrsra.u8 D0, D0, #0'
32750
32751   * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int)
32752     _Form of expected instruction(s):_ `vrsra.s32 D0, D0, #0'
32753
32754   * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int)
32755     _Form of expected instruction(s):_ `vrsra.s16 D0, D0, #0'
32756
32757   * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int)
32758     _Form of expected instruction(s):_ `vrsra.s8 D0, D0, #0'
32759
32760   * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int)
32761     _Form of expected instruction(s):_ `vrsra.u64 D0, D0, #0'
32762
32763   * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int)
32764     _Form of expected instruction(s):_ `vrsra.s64 D0, D0, #0'
32765
32766   * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
32767     _Form of expected instruction(s):_ `vrsra.u32 Q0, Q0, #0'
32768
32769   * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
32770     _Form of expected instruction(s):_ `vrsra.u16 Q0, Q0, #0'
32771
32772   * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
32773     _Form of expected instruction(s):_ `vrsra.u8 Q0, Q0, #0'
32774
32775   * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int)
32776     _Form of expected instruction(s):_ `vrsra.s32 Q0, Q0, #0'
32777
32778   * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int)
32779     _Form of expected instruction(s):_ `vrsra.s16 Q0, Q0, #0'
32780
32781   * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int)
32782     _Form of expected instruction(s):_ `vrsra.s8 Q0, Q0, #0'
32783
32784   * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
32785     _Form of expected instruction(s):_ `vrsra.u64 Q0, Q0, #0'
32786
32787   * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int)
32788     _Form of expected instruction(s):_ `vrsra.s64 Q0, Q0, #0'
32789
327906.56.3.36 Vector shift right and insert
32791.......................................
32792
32793   * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int)
32794     _Form of expected instruction(s):_ `vsri.32 D0, D0, #0'
32795
32796   * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int)
32797     _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
32798
32799   * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int)
32800     _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
32801
32802   * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int)
32803     _Form of expected instruction(s):_ `vsri.32 D0, D0, #0'
32804
32805   * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int)
32806     _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
32807
32808   * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int)
32809     _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
32810
32811   * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int)
32812     _Form of expected instruction(s):_ `vsri.64 D0, D0, #0'
32813
32814   * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int)
32815     _Form of expected instruction(s):_ `vsri.64 D0, D0, #0'
32816
32817   * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int)
32818     _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
32819
32820   * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int)
32821     _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
32822
32823   * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int)
32824     _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0'
32825
32826   * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int)
32827     _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
32828
32829   * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int)
32830     _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
32831
32832   * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int)
32833     _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0'
32834
32835   * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int)
32836     _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
32837
32838   * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int)
32839     _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
32840
32841   * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int)
32842     _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0'
32843
32844   * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int)
32845     _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0'
32846
32847   * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int)
32848     _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
32849
32850   * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int)
32851     _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
32852
328536.56.3.37 Vector shift left and insert
32854......................................
32855
32856   * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int)
32857     _Form of expected instruction(s):_ `vsli.32 D0, D0, #0'
32858
32859   * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int)
32860     _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
32861
32862   * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int)
32863     _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
32864
32865   * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int)
32866     _Form of expected instruction(s):_ `vsli.32 D0, D0, #0'
32867
32868   * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int)
32869     _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
32870
32871   * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int)
32872     _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
32873
32874   * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int)
32875     _Form of expected instruction(s):_ `vsli.64 D0, D0, #0'
32876
32877   * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int)
32878     _Form of expected instruction(s):_ `vsli.64 D0, D0, #0'
32879
32880   * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int)
32881     _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
32882
32883   * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int)
32884     _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
32885
32886   * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int)
32887     _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0'
32888
32889   * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int)
32890     _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
32891
32892   * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int)
32893     _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
32894
32895   * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int)
32896     _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0'
32897
32898   * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int)
32899     _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
32900
32901   * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int)
32902     _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
32903
32904   * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int)
32905     _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0'
32906
32907   * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int)
32908     _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0'
32909
32910   * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int)
32911     _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
32912
32913   * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int)
32914     _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
32915
329166.56.3.38 Absolute value
32917........................
32918
32919   * float32x2_t vabs_f32 (float32x2_t)
32920     _Form of expected instruction(s):_ `vabs.f32 D0, D0'
32921
32922   * int32x2_t vabs_s32 (int32x2_t)
32923     _Form of expected instruction(s):_ `vabs.s32 D0, D0'
32924
32925   * int16x4_t vabs_s16 (int16x4_t)
32926     _Form of expected instruction(s):_ `vabs.s16 D0, D0'
32927
32928   * int8x8_t vabs_s8 (int8x8_t)
32929     _Form of expected instruction(s):_ `vabs.s8 D0, D0'
32930
32931   * float32x4_t vabsq_f32 (float32x4_t)
32932     _Form of expected instruction(s):_ `vabs.f32 Q0, Q0'
32933
32934   * int32x4_t vabsq_s32 (int32x4_t)
32935     _Form of expected instruction(s):_ `vabs.s32 Q0, Q0'
32936
32937   * int16x8_t vabsq_s16 (int16x8_t)
32938     _Form of expected instruction(s):_ `vabs.s16 Q0, Q0'
32939
32940   * int8x16_t vabsq_s8 (int8x16_t)
32941     _Form of expected instruction(s):_ `vabs.s8 Q0, Q0'
32942
32943   * int32x2_t vqabs_s32 (int32x2_t)
32944     _Form of expected instruction(s):_ `vqabs.s32 D0, D0'
32945
32946   * int16x4_t vqabs_s16 (int16x4_t)
32947     _Form of expected instruction(s):_ `vqabs.s16 D0, D0'
32948
32949   * int8x8_t vqabs_s8 (int8x8_t)
32950     _Form of expected instruction(s):_ `vqabs.s8 D0, D0'
32951
32952   * int32x4_t vqabsq_s32 (int32x4_t)
32953     _Form of expected instruction(s):_ `vqabs.s32 Q0, Q0'
32954
32955   * int16x8_t vqabsq_s16 (int16x8_t)
32956     _Form of expected instruction(s):_ `vqabs.s16 Q0, Q0'
32957
32958   * int8x16_t vqabsq_s8 (int8x16_t)
32959     _Form of expected instruction(s):_ `vqabs.s8 Q0, Q0'
32960
329616.56.3.39 Negation
32962..................
32963
32964   * float32x2_t vneg_f32 (float32x2_t)
32965     _Form of expected instruction(s):_ `vneg.f32 D0, D0'
32966
32967   * int32x2_t vneg_s32 (int32x2_t)
32968     _Form of expected instruction(s):_ `vneg.s32 D0, D0'
32969
32970   * int16x4_t vneg_s16 (int16x4_t)
32971     _Form of expected instruction(s):_ `vneg.s16 D0, D0'
32972
32973   * int8x8_t vneg_s8 (int8x8_t)
32974     _Form of expected instruction(s):_ `vneg.s8 D0, D0'
32975
32976   * float32x4_t vnegq_f32 (float32x4_t)
32977     _Form of expected instruction(s):_ `vneg.f32 Q0, Q0'
32978
32979   * int32x4_t vnegq_s32 (int32x4_t)
32980     _Form of expected instruction(s):_ `vneg.s32 Q0, Q0'
32981
32982   * int16x8_t vnegq_s16 (int16x8_t)
32983     _Form of expected instruction(s):_ `vneg.s16 Q0, Q0'
32984
32985   * int8x16_t vnegq_s8 (int8x16_t)
32986     _Form of expected instruction(s):_ `vneg.s8 Q0, Q0'
32987
32988   * int32x2_t vqneg_s32 (int32x2_t)
32989     _Form of expected instruction(s):_ `vqneg.s32 D0, D0'
32990
32991   * int16x4_t vqneg_s16 (int16x4_t)
32992     _Form of expected instruction(s):_ `vqneg.s16 D0, D0'
32993
32994   * int8x8_t vqneg_s8 (int8x8_t)
32995     _Form of expected instruction(s):_ `vqneg.s8 D0, D0'
32996
32997   * int32x4_t vqnegq_s32 (int32x4_t)
32998     _Form of expected instruction(s):_ `vqneg.s32 Q0, Q0'
32999
33000   * int16x8_t vqnegq_s16 (int16x8_t)
33001     _Form of expected instruction(s):_ `vqneg.s16 Q0, Q0'
33002
33003   * int8x16_t vqnegq_s8 (int8x16_t)
33004     _Form of expected instruction(s):_ `vqneg.s8 Q0, Q0'
33005
330066.56.3.40 Bitwise not
33007.....................
33008
33009   * uint32x2_t vmvn_u32 (uint32x2_t)
33010     _Form of expected instruction(s):_ `vmvn D0, D0'
33011
33012   * uint16x4_t vmvn_u16 (uint16x4_t)
33013     _Form of expected instruction(s):_ `vmvn D0, D0'
33014
33015   * uint8x8_t vmvn_u8 (uint8x8_t)
33016     _Form of expected instruction(s):_ `vmvn D0, D0'
33017
33018   * int32x2_t vmvn_s32 (int32x2_t)
33019     _Form of expected instruction(s):_ `vmvn D0, D0'
33020
33021   * int16x4_t vmvn_s16 (int16x4_t)
33022     _Form of expected instruction(s):_ `vmvn D0, D0'
33023
33024   * int8x8_t vmvn_s8 (int8x8_t)
33025     _Form of expected instruction(s):_ `vmvn D0, D0'
33026
33027   * poly8x8_t vmvn_p8 (poly8x8_t)
33028     _Form of expected instruction(s):_ `vmvn D0, D0'
33029
33030   * uint32x4_t vmvnq_u32 (uint32x4_t)
33031     _Form of expected instruction(s):_ `vmvn Q0, Q0'
33032
33033   * uint16x8_t vmvnq_u16 (uint16x8_t)
33034     _Form of expected instruction(s):_ `vmvn Q0, Q0'
33035
33036   * uint8x16_t vmvnq_u8 (uint8x16_t)
33037     _Form of expected instruction(s):_ `vmvn Q0, Q0'
33038
33039   * int32x4_t vmvnq_s32 (int32x4_t)
33040     _Form of expected instruction(s):_ `vmvn Q0, Q0'
33041
33042   * int16x8_t vmvnq_s16 (int16x8_t)
33043     _Form of expected instruction(s):_ `vmvn Q0, Q0'
33044
33045   * int8x16_t vmvnq_s8 (int8x16_t)
33046     _Form of expected instruction(s):_ `vmvn Q0, Q0'
33047
33048   * poly8x16_t vmvnq_p8 (poly8x16_t)
33049     _Form of expected instruction(s):_ `vmvn Q0, Q0'
33050
330516.56.3.41 Count leading sign bits
33052.................................
33053
33054   * int32x2_t vcls_s32 (int32x2_t)
33055     _Form of expected instruction(s):_ `vcls.s32 D0, D0'
33056
33057   * int16x4_t vcls_s16 (int16x4_t)
33058     _Form of expected instruction(s):_ `vcls.s16 D0, D0'
33059
33060   * int8x8_t vcls_s8 (int8x8_t)
33061     _Form of expected instruction(s):_ `vcls.s8 D0, D0'
33062
33063   * int32x4_t vclsq_s32 (int32x4_t)
33064     _Form of expected instruction(s):_ `vcls.s32 Q0, Q0'
33065
33066   * int16x8_t vclsq_s16 (int16x8_t)
33067     _Form of expected instruction(s):_ `vcls.s16 Q0, Q0'
33068
33069   * int8x16_t vclsq_s8 (int8x16_t)
33070     _Form of expected instruction(s):_ `vcls.s8 Q0, Q0'
33071
330726.56.3.42 Count leading zeros
33073.............................
33074
33075   * uint32x2_t vclz_u32 (uint32x2_t)
33076     _Form of expected instruction(s):_ `vclz.i32 D0, D0'
33077
33078   * uint16x4_t vclz_u16 (uint16x4_t)
33079     _Form of expected instruction(s):_ `vclz.i16 D0, D0'
33080
33081   * uint8x8_t vclz_u8 (uint8x8_t)
33082     _Form of expected instruction(s):_ `vclz.i8 D0, D0'
33083
33084   * int32x2_t vclz_s32 (int32x2_t)
33085     _Form of expected instruction(s):_ `vclz.i32 D0, D0'
33086
33087   * int16x4_t vclz_s16 (int16x4_t)
33088     _Form of expected instruction(s):_ `vclz.i16 D0, D0'
33089
33090   * int8x8_t vclz_s8 (int8x8_t)
33091     _Form of expected instruction(s):_ `vclz.i8 D0, D0'
33092
33093   * uint32x4_t vclzq_u32 (uint32x4_t)
33094     _Form of expected instruction(s):_ `vclz.i32 Q0, Q0'
33095
33096   * uint16x8_t vclzq_u16 (uint16x8_t)
33097     _Form of expected instruction(s):_ `vclz.i16 Q0, Q0'
33098
33099   * uint8x16_t vclzq_u8 (uint8x16_t)
33100     _Form of expected instruction(s):_ `vclz.i8 Q0, Q0'
33101
33102   * int32x4_t vclzq_s32 (int32x4_t)
33103     _Form of expected instruction(s):_ `vclz.i32 Q0, Q0'
33104
33105   * int16x8_t vclzq_s16 (int16x8_t)
33106     _Form of expected instruction(s):_ `vclz.i16 Q0, Q0'
33107
33108   * int8x16_t vclzq_s8 (int8x16_t)
33109     _Form of expected instruction(s):_ `vclz.i8 Q0, Q0'
33110
331116.56.3.43 Count number of set bits
33112..................................
33113
33114   * uint8x8_t vcnt_u8 (uint8x8_t)
33115     _Form of expected instruction(s):_ `vcnt.8 D0, D0'
33116
33117   * int8x8_t vcnt_s8 (int8x8_t)
33118     _Form of expected instruction(s):_ `vcnt.8 D0, D0'
33119
33120   * poly8x8_t vcnt_p8 (poly8x8_t)
33121     _Form of expected instruction(s):_ `vcnt.8 D0, D0'
33122
33123   * uint8x16_t vcntq_u8 (uint8x16_t)
33124     _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
33125
33126   * int8x16_t vcntq_s8 (int8x16_t)
33127     _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
33128
33129   * poly8x16_t vcntq_p8 (poly8x16_t)
33130     _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
33131
331326.56.3.44 Reciprocal estimate
33133.............................
33134
33135   * float32x2_t vrecpe_f32 (float32x2_t)
33136     _Form of expected instruction(s):_ `vrecpe.f32 D0, D0'
33137
33138   * uint32x2_t vrecpe_u32 (uint32x2_t)
33139     _Form of expected instruction(s):_ `vrecpe.u32 D0, D0'
33140
33141   * float32x4_t vrecpeq_f32 (float32x4_t)
33142     _Form of expected instruction(s):_ `vrecpe.f32 Q0, Q0'
33143
33144   * uint32x4_t vrecpeq_u32 (uint32x4_t)
33145     _Form of expected instruction(s):_ `vrecpe.u32 Q0, Q0'
33146
331476.56.3.45 Reciprocal square-root estimate
33148.........................................
33149
33150   * float32x2_t vrsqrte_f32 (float32x2_t)
33151     _Form of expected instruction(s):_ `vrsqrte.f32 D0, D0'
33152
33153   * uint32x2_t vrsqrte_u32 (uint32x2_t)
33154     _Form of expected instruction(s):_ `vrsqrte.u32 D0, D0'
33155
33156   * float32x4_t vrsqrteq_f32 (float32x4_t)
33157     _Form of expected instruction(s):_ `vrsqrte.f32 Q0, Q0'
33158
33159   * uint32x4_t vrsqrteq_u32 (uint32x4_t)
33160     _Form of expected instruction(s):_ `vrsqrte.u32 Q0, Q0'
33161
331626.56.3.46 Get lanes from a vector
33163.................................
33164
33165   * uint32_t vget_lane_u32 (uint32x2_t, const int)
33166     _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
33167
33168   * uint16_t vget_lane_u16 (uint16x4_t, const int)
33169     _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
33170
33171   * uint8_t vget_lane_u8 (uint8x8_t, const int)
33172     _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
33173
33174   * int32_t vget_lane_s32 (int32x2_t, const int)
33175     _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
33176
33177   * int16_t vget_lane_s16 (int16x4_t, const int)
33178     _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]'
33179
33180   * int8_t vget_lane_s8 (int8x8_t, const int)
33181     _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]'
33182
33183   * float32_t vget_lane_f32 (float32x2_t, const int)
33184     _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
33185
33186   * poly16_t vget_lane_p16 (poly16x4_t, const int)
33187     _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
33188
33189   * poly8_t vget_lane_p8 (poly8x8_t, const int)
33190     _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
33191
33192   * uint64_t vget_lane_u64 (uint64x1_t, const int)
33193
33194   * int64_t vget_lane_s64 (int64x1_t, const int)
33195
33196   * uint32_t vgetq_lane_u32 (uint32x4_t, const int)
33197     _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
33198
33199   * uint16_t vgetq_lane_u16 (uint16x8_t, const int)
33200     _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
33201
33202   * uint8_t vgetq_lane_u8 (uint8x16_t, const int)
33203     _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
33204
33205   * int32_t vgetq_lane_s32 (int32x4_t, const int)
33206     _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
33207
33208   * int16_t vgetq_lane_s16 (int16x8_t, const int)
33209     _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]'
33210
33211   * int8_t vgetq_lane_s8 (int8x16_t, const int)
33212     _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]'
33213
33214   * float32_t vgetq_lane_f32 (float32x4_t, const int)
33215     _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
33216
33217   * poly16_t vgetq_lane_p16 (poly16x8_t, const int)
33218     _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
33219
33220   * poly8_t vgetq_lane_p8 (poly8x16_t, const int)
33221     _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
33222
33223   * uint64_t vgetq_lane_u64 (uint64x2_t, const int)
33224     _Form of expected instruction(s):_ `vmov R0, R0, D0' _or_ `fmrrd
33225     R0, R0, D0'
33226
33227   * int64_t vgetq_lane_s64 (int64x2_t, const int)
33228     _Form of expected instruction(s):_ `vmov R0, R0, D0' _or_ `fmrrd
33229     R0, R0, D0'
33230
332316.56.3.47 Set lanes in a vector
33232...............................
33233
33234   * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int)
33235     _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
33236
33237   * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int)
33238     _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
33239
33240   * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int)
33241     _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
33242
33243   * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int)
33244     _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
33245
33246   * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int)
33247     _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
33248
33249   * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int)
33250     _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
33251
33252   * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int)
33253     _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
33254
33255   * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int)
33256     _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
33257
33258   * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int)
33259     _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
33260
33261   * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int)
33262
33263   * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int)
33264
33265   * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int)
33266     _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
33267
33268   * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int)
33269     _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
33270
33271   * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int)
33272     _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
33273
33274   * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int)
33275     _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
33276
33277   * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int)
33278     _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
33279
33280   * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int)
33281     _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
33282
33283   * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int)
33284     _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
33285
33286   * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int)
33287     _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
33288
33289   * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int)
33290     _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
33291
33292   * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int)
33293     _Form of expected instruction(s):_ `vmov D0, R0, R0'
33294
33295   * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int)
33296     _Form of expected instruction(s):_ `vmov D0, R0, R0'
33297
332986.56.3.48 Create vector from literal bit pattern
33299................................................
33300
33301   * uint32x2_t vcreate_u32 (uint64_t)
33302
33303   * uint16x4_t vcreate_u16 (uint64_t)
33304
33305   * uint8x8_t vcreate_u8 (uint64_t)
33306
33307   * int32x2_t vcreate_s32 (uint64_t)
33308
33309   * int16x4_t vcreate_s16 (uint64_t)
33310
33311   * int8x8_t vcreate_s8 (uint64_t)
33312
33313   * uint64x1_t vcreate_u64 (uint64_t)
33314
33315   * int64x1_t vcreate_s64 (uint64_t)
33316
33317   * float32x2_t vcreate_f32 (uint64_t)
33318
33319   * poly16x4_t vcreate_p16 (uint64_t)
33320
33321   * poly8x8_t vcreate_p8 (uint64_t)
33322
333236.56.3.49 Set all lanes to the same value
33324.........................................
33325
33326   * uint32x2_t vdup_n_u32 (uint32_t)
33327     _Form of expected instruction(s):_ `vdup.32 D0, R0'
33328
33329   * uint16x4_t vdup_n_u16 (uint16_t)
33330     _Form of expected instruction(s):_ `vdup.16 D0, R0'
33331
33332   * uint8x8_t vdup_n_u8 (uint8_t)
33333     _Form of expected instruction(s):_ `vdup.8 D0, R0'
33334
33335   * int32x2_t vdup_n_s32 (int32_t)
33336     _Form of expected instruction(s):_ `vdup.32 D0, R0'
33337
33338   * int16x4_t vdup_n_s16 (int16_t)
33339     _Form of expected instruction(s):_ `vdup.16 D0, R0'
33340
33341   * int8x8_t vdup_n_s8 (int8_t)
33342     _Form of expected instruction(s):_ `vdup.8 D0, R0'
33343
33344   * float32x2_t vdup_n_f32 (float32_t)
33345     _Form of expected instruction(s):_ `vdup.32 D0, R0'
33346
33347   * poly16x4_t vdup_n_p16 (poly16_t)
33348     _Form of expected instruction(s):_ `vdup.16 D0, R0'
33349
33350   * poly8x8_t vdup_n_p8 (poly8_t)
33351     _Form of expected instruction(s):_ `vdup.8 D0, R0'
33352
33353   * uint64x1_t vdup_n_u64 (uint64_t)
33354
33355   * int64x1_t vdup_n_s64 (int64_t)
33356
33357   * uint32x4_t vdupq_n_u32 (uint32_t)
33358     _Form of expected instruction(s):_ `vdup.32 Q0, R0'
33359
33360   * uint16x8_t vdupq_n_u16 (uint16_t)
33361     _Form of expected instruction(s):_ `vdup.16 Q0, R0'
33362
33363   * uint8x16_t vdupq_n_u8 (uint8_t)
33364     _Form of expected instruction(s):_ `vdup.8 Q0, R0'
33365
33366   * int32x4_t vdupq_n_s32 (int32_t)
33367     _Form of expected instruction(s):_ `vdup.32 Q0, R0'
33368
33369   * int16x8_t vdupq_n_s16 (int16_t)
33370     _Form of expected instruction(s):_ `vdup.16 Q0, R0'
33371
33372   * int8x16_t vdupq_n_s8 (int8_t)
33373     _Form of expected instruction(s):_ `vdup.8 Q0, R0'
33374
33375   * float32x4_t vdupq_n_f32 (float32_t)
33376     _Form of expected instruction(s):_ `vdup.32 Q0, R0'
33377
33378   * poly16x8_t vdupq_n_p16 (poly16_t)
33379     _Form of expected instruction(s):_ `vdup.16 Q0, R0'
33380
33381   * poly8x16_t vdupq_n_p8 (poly8_t)
33382     _Form of expected instruction(s):_ `vdup.8 Q0, R0'
33383
33384   * uint64x2_t vdupq_n_u64 (uint64_t)
33385
33386   * int64x2_t vdupq_n_s64 (int64_t)
33387
33388   * uint32x2_t vmov_n_u32 (uint32_t)
33389     _Form of expected instruction(s):_ `vdup.32 D0, R0'
33390
33391   * uint16x4_t vmov_n_u16 (uint16_t)
33392     _Form of expected instruction(s):_ `vdup.16 D0, R0'
33393
33394   * uint8x8_t vmov_n_u8 (uint8_t)
33395     _Form of expected instruction(s):_ `vdup.8 D0, R0'
33396
33397   * int32x2_t vmov_n_s32 (int32_t)
33398     _Form of expected instruction(s):_ `vdup.32 D0, R0'
33399
33400   * int16x4_t vmov_n_s16 (int16_t)
33401     _Form of expected instruction(s):_ `vdup.16 D0, R0'
33402
33403   * int8x8_t vmov_n_s8 (int8_t)
33404     _Form of expected instruction(s):_ `vdup.8 D0, R0'
33405
33406   * float32x2_t vmov_n_f32 (float32_t)
33407     _Form of expected instruction(s):_ `vdup.32 D0, R0'
33408
33409   * poly16x4_t vmov_n_p16 (poly16_t)
33410     _Form of expected instruction(s):_ `vdup.16 D0, R0'
33411
33412   * poly8x8_t vmov_n_p8 (poly8_t)
33413     _Form of expected instruction(s):_ `vdup.8 D0, R0'
33414
33415   * uint64x1_t vmov_n_u64 (uint64_t)
33416
33417   * int64x1_t vmov_n_s64 (int64_t)
33418
33419   * uint32x4_t vmovq_n_u32 (uint32_t)
33420     _Form of expected instruction(s):_ `vdup.32 Q0, R0'
33421
33422   * uint16x8_t vmovq_n_u16 (uint16_t)
33423     _Form of expected instruction(s):_ `vdup.16 Q0, R0'
33424
33425   * uint8x16_t vmovq_n_u8 (uint8_t)
33426     _Form of expected instruction(s):_ `vdup.8 Q0, R0'
33427
33428   * int32x4_t vmovq_n_s32 (int32_t)
33429     _Form of expected instruction(s):_ `vdup.32 Q0, R0'
33430
33431   * int16x8_t vmovq_n_s16 (int16_t)
33432     _Form of expected instruction(s):_ `vdup.16 Q0, R0'
33433
33434   * int8x16_t vmovq_n_s8 (int8_t)
33435     _Form of expected instruction(s):_ `vdup.8 Q0, R0'
33436
33437   * float32x4_t vmovq_n_f32 (float32_t)
33438     _Form of expected instruction(s):_ `vdup.32 Q0, R0'
33439
33440   * poly16x8_t vmovq_n_p16 (poly16_t)
33441     _Form of expected instruction(s):_ `vdup.16 Q0, R0'
33442
33443   * poly8x16_t vmovq_n_p8 (poly8_t)
33444     _Form of expected instruction(s):_ `vdup.8 Q0, R0'
33445
33446   * uint64x2_t vmovq_n_u64 (uint64_t)
33447
33448   * int64x2_t vmovq_n_s64 (int64_t)
33449
33450   * uint32x2_t vdup_lane_u32 (uint32x2_t, const int)
33451     _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
33452
33453   * uint16x4_t vdup_lane_u16 (uint16x4_t, const int)
33454     _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
33455
33456   * uint8x8_t vdup_lane_u8 (uint8x8_t, const int)
33457     _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
33458
33459   * int32x2_t vdup_lane_s32 (int32x2_t, const int)
33460     _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
33461
33462   * int16x4_t vdup_lane_s16 (int16x4_t, const int)
33463     _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
33464
33465   * int8x8_t vdup_lane_s8 (int8x8_t, const int)
33466     _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
33467
33468   * float32x2_t vdup_lane_f32 (float32x2_t, const int)
33469     _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
33470
33471   * poly16x4_t vdup_lane_p16 (poly16x4_t, const int)
33472     _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
33473
33474   * poly8x8_t vdup_lane_p8 (poly8x8_t, const int)
33475     _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
33476
33477   * uint64x1_t vdup_lane_u64 (uint64x1_t, const int)
33478
33479   * int64x1_t vdup_lane_s64 (int64x1_t, const int)
33480
33481   * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int)
33482     _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
33483
33484   * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int)
33485     _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
33486
33487   * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int)
33488     _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
33489
33490   * int32x4_t vdupq_lane_s32 (int32x2_t, const int)
33491     _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
33492
33493   * int16x8_t vdupq_lane_s16 (int16x4_t, const int)
33494     _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
33495
33496   * int8x16_t vdupq_lane_s8 (int8x8_t, const int)
33497     _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
33498
33499   * float32x4_t vdupq_lane_f32 (float32x2_t, const int)
33500     _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
33501
33502   * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int)
33503     _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
33504
33505   * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int)
33506     _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
33507
33508   * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int)
33509
33510   * int64x2_t vdupq_lane_s64 (int64x1_t, const int)
33511
335126.56.3.50 Combining vectors
33513...........................
33514
33515   * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t)
33516
33517   * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t)
33518
33519   * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t)
33520
33521   * int32x4_t vcombine_s32 (int32x2_t, int32x2_t)
33522
33523   * int16x8_t vcombine_s16 (int16x4_t, int16x4_t)
33524
33525   * int8x16_t vcombine_s8 (int8x8_t, int8x8_t)
33526
33527   * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t)
33528
33529   * int64x2_t vcombine_s64 (int64x1_t, int64x1_t)
33530
33531   * float32x4_t vcombine_f32 (float32x2_t, float32x2_t)
33532
33533   * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t)
33534
33535   * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t)
33536
335376.56.3.51 Splitting vectors
33538...........................
33539
33540   * uint32x2_t vget_high_u32 (uint32x4_t)
33541
33542   * uint16x4_t vget_high_u16 (uint16x8_t)
33543
33544   * uint8x8_t vget_high_u8 (uint8x16_t)
33545
33546   * int32x2_t vget_high_s32 (int32x4_t)
33547
33548   * int16x4_t vget_high_s16 (int16x8_t)
33549
33550   * int8x8_t vget_high_s8 (int8x16_t)
33551
33552   * uint64x1_t vget_high_u64 (uint64x2_t)
33553
33554   * int64x1_t vget_high_s64 (int64x2_t)
33555
33556   * float32x2_t vget_high_f32 (float32x4_t)
33557
33558   * poly16x4_t vget_high_p16 (poly16x8_t)
33559
33560   * poly8x8_t vget_high_p8 (poly8x16_t)
33561
33562   * uint32x2_t vget_low_u32 (uint32x4_t)
33563     _Form of expected instruction(s):_ `vmov D0, D0'
33564
33565   * uint16x4_t vget_low_u16 (uint16x8_t)
33566     _Form of expected instruction(s):_ `vmov D0, D0'
33567
33568   * uint8x8_t vget_low_u8 (uint8x16_t)
33569     _Form of expected instruction(s):_ `vmov D0, D0'
33570
33571   * int32x2_t vget_low_s32 (int32x4_t)
33572     _Form of expected instruction(s):_ `vmov D0, D0'
33573
33574   * int16x4_t vget_low_s16 (int16x8_t)
33575     _Form of expected instruction(s):_ `vmov D0, D0'
33576
33577   * int8x8_t vget_low_s8 (int8x16_t)
33578     _Form of expected instruction(s):_ `vmov D0, D0'
33579
33580   * float32x2_t vget_low_f32 (float32x4_t)
33581     _Form of expected instruction(s):_ `vmov D0, D0'
33582
33583   * poly16x4_t vget_low_p16 (poly16x8_t)
33584     _Form of expected instruction(s):_ `vmov D0, D0'
33585
33586   * poly8x8_t vget_low_p8 (poly8x16_t)
33587     _Form of expected instruction(s):_ `vmov D0, D0'
33588
33589   * uint64x1_t vget_low_u64 (uint64x2_t)
33590
33591   * int64x1_t vget_low_s64 (int64x2_t)
33592
335936.56.3.52 Conversions
33594.....................
33595
33596   * float32x2_t vcvt_f32_u32 (uint32x2_t)
33597     _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0'
33598
33599   * float32x2_t vcvt_f32_s32 (int32x2_t)
33600     _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0'
33601
33602   * uint32x2_t vcvt_u32_f32 (float32x2_t)
33603     _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0'
33604
33605   * int32x2_t vcvt_s32_f32 (float32x2_t)
33606     _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0'
33607
33608   * float32x4_t vcvtq_f32_u32 (uint32x4_t)
33609     _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0'
33610
33611   * float32x4_t vcvtq_f32_s32 (int32x4_t)
33612     _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0'
33613
33614   * uint32x4_t vcvtq_u32_f32 (float32x4_t)
33615     _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0'
33616
33617   * int32x4_t vcvtq_s32_f32 (float32x4_t)
33618     _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0'
33619
33620   * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int)
33621     _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0, #0'
33622
33623   * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int)
33624     _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0, #0'
33625
33626   * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int)
33627     _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0, #0'
33628
33629   * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int)
33630     _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0, #0'
33631
33632   * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int)
33633     _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0, #0'
33634
33635   * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int)
33636     _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0, #0'
33637
33638   * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int)
33639     _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0, #0'
33640
33641   * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int)
33642     _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0, #0'
33643
336446.56.3.53 Move, single_opcode narrowing
33645.......................................
33646
33647   * uint32x2_t vmovn_u64 (uint64x2_t)
33648     _Form of expected instruction(s):_ `vmovn.i64 D0, Q0'
33649
33650   * uint16x4_t vmovn_u32 (uint32x4_t)
33651     _Form of expected instruction(s):_ `vmovn.i32 D0, Q0'
33652
33653   * uint8x8_t vmovn_u16 (uint16x8_t)
33654     _Form of expected instruction(s):_ `vmovn.i16 D0, Q0'
33655
33656   * int32x2_t vmovn_s64 (int64x2_t)
33657     _Form of expected instruction(s):_ `vmovn.i64 D0, Q0'
33658
33659   * int16x4_t vmovn_s32 (int32x4_t)
33660     _Form of expected instruction(s):_ `vmovn.i32 D0, Q0'
33661
33662   * int8x8_t vmovn_s16 (int16x8_t)
33663     _Form of expected instruction(s):_ `vmovn.i16 D0, Q0'
33664
33665   * uint32x2_t vqmovn_u64 (uint64x2_t)
33666     _Form of expected instruction(s):_ `vqmovn.u64 D0, Q0'
33667
33668   * uint16x4_t vqmovn_u32 (uint32x4_t)
33669     _Form of expected instruction(s):_ `vqmovn.u32 D0, Q0'
33670
33671   * uint8x8_t vqmovn_u16 (uint16x8_t)
33672     _Form of expected instruction(s):_ `vqmovn.u16 D0, Q0'
33673
33674   * int32x2_t vqmovn_s64 (int64x2_t)
33675     _Form of expected instruction(s):_ `vqmovn.s64 D0, Q0'
33676
33677   * int16x4_t vqmovn_s32 (int32x4_t)
33678     _Form of expected instruction(s):_ `vqmovn.s32 D0, Q0'
33679
33680   * int8x8_t vqmovn_s16 (int16x8_t)
33681     _Form of expected instruction(s):_ `vqmovn.s16 D0, Q0'
33682
33683   * uint32x2_t vqmovun_s64 (int64x2_t)
33684     _Form of expected instruction(s):_ `vqmovun.s64 D0, Q0'
33685
33686   * uint16x4_t vqmovun_s32 (int32x4_t)
33687     _Form of expected instruction(s):_ `vqmovun.s32 D0, Q0'
33688
33689   * uint8x8_t vqmovun_s16 (int16x8_t)
33690     _Form of expected instruction(s):_ `vqmovun.s16 D0, Q0'
33691
336926.56.3.54 Move, single_opcode long
33693..................................
33694
33695   * uint64x2_t vmovl_u32 (uint32x2_t)
33696     _Form of expected instruction(s):_ `vmovl.u32 Q0, D0'
33697
33698   * uint32x4_t vmovl_u16 (uint16x4_t)
33699     _Form of expected instruction(s):_ `vmovl.u16 Q0, D0'
33700
33701   * uint16x8_t vmovl_u8 (uint8x8_t)
33702     _Form of expected instruction(s):_ `vmovl.u8 Q0, D0'
33703
33704   * int64x2_t vmovl_s32 (int32x2_t)
33705     _Form of expected instruction(s):_ `vmovl.s32 Q0, D0'
33706
33707   * int32x4_t vmovl_s16 (int16x4_t)
33708     _Form of expected instruction(s):_ `vmovl.s16 Q0, D0'
33709
33710   * int16x8_t vmovl_s8 (int8x8_t)
33711     _Form of expected instruction(s):_ `vmovl.s8 Q0, D0'
33712
337136.56.3.55 Table lookup
33714......................
33715
33716   * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t)
33717     _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
33718
33719   * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t)
33720     _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
33721
33722   * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t)
33723     _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
33724
33725   * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t)
33726     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
33727
33728   * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t)
33729     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
33730
33731   * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t)
33732     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
33733
33734   * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t)
33735     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
33736
33737   * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t)
33738     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
33739
33740   * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t)
33741     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
33742
33743   * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t)
33744     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
33745     D0'
33746
33747   * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t)
33748     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
33749     D0'
33750
33751   * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t)
33752     _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
33753     D0'
33754
337556.56.3.56 Extended table lookup
33756...............................
33757
33758   * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t)
33759     _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
33760
33761   * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t)
33762     _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
33763
33764   * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
33765     _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
33766
33767   * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t)
33768     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
33769
33770   * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t)
33771     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
33772
33773   * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t)
33774     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
33775
33776   * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t)
33777     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
33778
33779   * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t)
33780     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
33781
33782   * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t)
33783     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
33784
33785   * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t)
33786     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
33787     D0'
33788
33789   * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t)
33790     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
33791     D0'
33792
33793   * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t)
33794     _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
33795     D0'
33796
337976.56.3.57 Multiply, lane
33798........................
33799
33800   * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int)
33801     _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]'
33802
33803   * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int)
33804     _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
33805
33806   * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int)
33807     _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
33808
33809   * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int)
33810     _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
33811
33812   * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int)
33813     _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
33814
33815   * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int)
33816     _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]'
33817
33818   * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int)
33819     _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
33820
33821   * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int)
33822     _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
33823
33824   * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int)
33825     _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
33826
33827   * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int)
33828     _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
33829
338306.56.3.58 Long multiply, lane
33831.............................
33832
33833   * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int)
33834     _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]'
33835
33836   * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int)
33837     _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]'
33838
33839   * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int)
33840     _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]'
33841
33842   * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int)
33843     _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]'
33844
338456.56.3.59 Saturating doubling long multiply, lane
33846.................................................
33847
33848   * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int)
33849     _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]'
33850
33851   * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int)
33852     _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]'
33853
338546.56.3.60 Saturating doubling multiply high, lane
33855.................................................
33856
33857   * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
33858     _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]'
33859
33860   * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
33861     _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]'
33862
33863   * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
33864     _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]'
33865
33866   * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
33867     _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]'
33868
33869   * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
33870     _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]'
33871
33872   * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
33873     _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]'
33874
33875   * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
33876     _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]'
33877
33878   * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
33879     _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]'
33880
338816.56.3.61 Multiply-accumulate, lane
33882...................................
33883
33884   * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
33885     const int)
33886     _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]'
33887
33888   * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t,
33889     const int)
33890     _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
33891
33892   * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t,
33893     const int)
33894     _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
33895
33896   * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
33897     int)
33898     _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
33899
33900   * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
33901     int)
33902     _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
33903
33904   * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
33905     const int)
33906     _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]'
33907
33908   * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
33909     const int)
33910     _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
33911
33912   * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
33913     const int)
33914     _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
33915
33916   * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
33917     int)
33918     _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
33919
33920   * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
33921     int)
33922     _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
33923
33924   * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
33925     const int)
33926     _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]'
33927
33928   * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
33929     const int)
33930     _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]'
33931
33932   * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
33933     int)
33934     _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]'
33935
33936   * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
33937     int)
33938     _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]'
33939
33940   * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
33941     int)
33942     _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]'
33943
33944   * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
33945     int)
33946     _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]'
33947
339486.56.3.62 Multiply-subtract, lane
33949.................................
33950
33951   * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
33952     const int)
33953     _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]'
33954
33955   * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t,
33956     const int)
33957     _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
33958
33959   * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t,
33960     const int)
33961     _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
33962
33963   * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
33964     int)
33965     _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
33966
33967   * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
33968     int)
33969     _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
33970
33971   * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
33972     const int)
33973     _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]'
33974
33975   * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
33976     const int)
33977     _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
33978
33979   * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
33980     const int)
33981     _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
33982
33983   * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
33984     int)
33985     _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
33986
33987   * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
33988     int)
33989     _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
33990
33991   * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
33992     const int)
33993     _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]'
33994
33995   * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
33996     const int)
33997     _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]'
33998
33999   * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
34000     int)
34001     _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]'
34002
34003   * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
34004     int)
34005     _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]'
34006
34007   * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
34008     int)
34009     _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]'
34010
34011   * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
34012     int)
34013     _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]'
34014
340156.56.3.63 Vector multiply by scalar
34016...................................
34017
34018   * float32x2_t vmul_n_f32 (float32x2_t, float32_t)
34019     _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]'
34020
34021   * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t)
34022     _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
34023
34024   * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t)
34025     _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
34026
34027   * int32x2_t vmul_n_s32 (int32x2_t, int32_t)
34028     _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
34029
34030   * int16x4_t vmul_n_s16 (int16x4_t, int16_t)
34031     _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
34032
34033   * float32x4_t vmulq_n_f32 (float32x4_t, float32_t)
34034     _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]'
34035
34036   * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t)
34037     _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
34038
34039   * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t)
34040     _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
34041
34042   * int32x4_t vmulq_n_s32 (int32x4_t, int32_t)
34043     _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
34044
34045   * int16x8_t vmulq_n_s16 (int16x8_t, int16_t)
34046     _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
34047
340486.56.3.64 Vector long multiply by scalar
34049........................................
34050
34051   * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t)
34052     _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]'
34053
34054   * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t)
34055     _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]'
34056
34057   * int64x2_t vmull_n_s32 (int32x2_t, int32_t)
34058     _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]'
34059
34060   * int32x4_t vmull_n_s16 (int16x4_t, int16_t)
34061     _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]'
34062
340636.56.3.65 Vector saturating doubling long multiply by scalar
34064............................................................
34065
34066   * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t)
34067     _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]'
34068
34069   * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t)
34070     _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]'
34071
340726.56.3.66 Vector saturating doubling multiply high by scalar
34073............................................................
34074
34075   * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t)
34076     _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]'
34077
34078   * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t)
34079     _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]'
34080
34081   * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t)
34082     _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]'
34083
34084   * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t)
34085     _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]'
34086
34087   * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t)
34088     _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]'
34089
34090   * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t)
34091     _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]'
34092
34093   * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t)
34094     _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]'
34095
34096   * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t)
34097     _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]'
34098
340996.56.3.67 Vector multiply-accumulate by scalar
34100..............................................
34101
34102   * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t)
34103     _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]'
34104
34105   * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
34106     _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
34107
34108   * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
34109     _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
34110
34111   * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t)
34112     _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
34113
34114   * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t)
34115     _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
34116
34117   * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t)
34118     _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]'
34119
34120   * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
34121     _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
34122
34123   * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
34124     _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
34125
34126   * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t)
34127     _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
34128
34129   * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t)
34130     _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
34131
34132   * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
34133     _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]'
34134
34135   * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
34136     _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]'
34137
34138   * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
34139     _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]'
34140
34141   * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
34142     _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]'
34143
34144   * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
34145     _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]'
34146
34147   * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
34148     _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]'
34149
341506.56.3.68 Vector multiply-subtract by scalar
34151............................................
34152
34153   * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t)
34154     _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]'
34155
34156   * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
34157     _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
34158
34159   * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
34160     _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
34161
34162   * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t)
34163     _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
34164
34165   * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t)
34166     _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
34167
34168   * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t)
34169     _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]'
34170
34171   * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
34172     _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
34173
34174   * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
34175     _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
34176
34177   * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t)
34178     _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
34179
34180   * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t)
34181     _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
34182
34183   * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
34184     _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]'
34185
34186   * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
34187     _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]'
34188
34189   * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
34190     _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]'
34191
34192   * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
34193     _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]'
34194
34195   * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
34196     _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]'
34197
34198   * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
34199     _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]'
34200
342016.56.3.69 Vector extract
34202........................
34203
34204   * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int)
34205     _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
34206
34207   * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int)
34208     _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
34209
34210   * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int)
34211     _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
34212
34213   * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int)
34214     _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
34215
34216   * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int)
34217     _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
34218
34219   * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int)
34220     _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
34221
34222   * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int)
34223     _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0'
34224
34225   * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int)
34226     _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0'
34227
34228   * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int)
34229     _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
34230
34231   * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int)
34232     _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
34233
34234   * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int)
34235     _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
34236
34237   * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int)
34238     _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
34239
34240   * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int)
34241     _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
34242
34243   * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int)
34244     _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
34245
34246   * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int)
34247     _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
34248
34249   * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int)
34250     _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
34251
34252   * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int)
34253     _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
34254
34255   * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int)
34256     _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0'
34257
34258   * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int)
34259     _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0'
34260
34261   * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int)
34262     _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
34263
34264   * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int)
34265     _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
34266
34267   * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int)
34268     _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
34269
342706.56.3.70 Reverse elements
34271..........................
34272
34273   * uint32x2_t vrev64_u32 (uint32x2_t)
34274     _Form of expected instruction(s):_ `vrev64.32 D0, D0'
34275
34276   * uint16x4_t vrev64_u16 (uint16x4_t)
34277     _Form of expected instruction(s):_ `vrev64.16 D0, D0'
34278
34279   * uint8x8_t vrev64_u8 (uint8x8_t)
34280     _Form of expected instruction(s):_ `vrev64.8 D0, D0'
34281
34282   * int32x2_t vrev64_s32 (int32x2_t)
34283     _Form of expected instruction(s):_ `vrev64.32 D0, D0'
34284
34285   * int16x4_t vrev64_s16 (int16x4_t)
34286     _Form of expected instruction(s):_ `vrev64.16 D0, D0'
34287
34288   * int8x8_t vrev64_s8 (int8x8_t)
34289     _Form of expected instruction(s):_ `vrev64.8 D0, D0'
34290
34291   * float32x2_t vrev64_f32 (float32x2_t)
34292     _Form of expected instruction(s):_ `vrev64.32 D0, D0'
34293
34294   * poly16x4_t vrev64_p16 (poly16x4_t)
34295     _Form of expected instruction(s):_ `vrev64.16 D0, D0'
34296
34297   * poly8x8_t vrev64_p8 (poly8x8_t)
34298     _Form of expected instruction(s):_ `vrev64.8 D0, D0'
34299
34300   * uint32x4_t vrev64q_u32 (uint32x4_t)
34301     _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
34302
34303   * uint16x8_t vrev64q_u16 (uint16x8_t)
34304     _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
34305
34306   * uint8x16_t vrev64q_u8 (uint8x16_t)
34307     _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
34308
34309   * int32x4_t vrev64q_s32 (int32x4_t)
34310     _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
34311
34312   * int16x8_t vrev64q_s16 (int16x8_t)
34313     _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
34314
34315   * int8x16_t vrev64q_s8 (int8x16_t)
34316     _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
34317
34318   * float32x4_t vrev64q_f32 (float32x4_t)
34319     _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
34320
34321   * poly16x8_t vrev64q_p16 (poly16x8_t)
34322     _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
34323
34324   * poly8x16_t vrev64q_p8 (poly8x16_t)
34325     _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
34326
34327   * uint16x4_t vrev32_u16 (uint16x4_t)
34328     _Form of expected instruction(s):_ `vrev32.16 D0, D0'
34329
34330   * int16x4_t vrev32_s16 (int16x4_t)
34331     _Form of expected instruction(s):_ `vrev32.16 D0, D0'
34332
34333   * uint8x8_t vrev32_u8 (uint8x8_t)
34334     _Form of expected instruction(s):_ `vrev32.8 D0, D0'
34335
34336   * int8x8_t vrev32_s8 (int8x8_t)
34337     _Form of expected instruction(s):_ `vrev32.8 D0, D0'
34338
34339   * poly16x4_t vrev32_p16 (poly16x4_t)
34340     _Form of expected instruction(s):_ `vrev32.16 D0, D0'
34341
34342   * poly8x8_t vrev32_p8 (poly8x8_t)
34343     _Form of expected instruction(s):_ `vrev32.8 D0, D0'
34344
34345   * uint16x8_t vrev32q_u16 (uint16x8_t)
34346     _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
34347
34348   * int16x8_t vrev32q_s16 (int16x8_t)
34349     _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
34350
34351   * uint8x16_t vrev32q_u8 (uint8x16_t)
34352     _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
34353
34354   * int8x16_t vrev32q_s8 (int8x16_t)
34355     _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
34356
34357   * poly16x8_t vrev32q_p16 (poly16x8_t)
34358     _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
34359
34360   * poly8x16_t vrev32q_p8 (poly8x16_t)
34361     _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
34362
34363   * uint8x8_t vrev16_u8 (uint8x8_t)
34364     _Form of expected instruction(s):_ `vrev16.8 D0, D0'
34365
34366   * int8x8_t vrev16_s8 (int8x8_t)
34367     _Form of expected instruction(s):_ `vrev16.8 D0, D0'
34368
34369   * poly8x8_t vrev16_p8 (poly8x8_t)
34370     _Form of expected instruction(s):_ `vrev16.8 D0, D0'
34371
34372   * uint8x16_t vrev16q_u8 (uint8x16_t)
34373     _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
34374
34375   * int8x16_t vrev16q_s8 (int8x16_t)
34376     _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
34377
34378   * poly8x16_t vrev16q_p8 (poly8x16_t)
34379     _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
34380
343816.56.3.71 Bit selection
34382.......................
34383
34384   * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
34385     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
34386     D0, D0, D0' _or_ `vbif D0, D0, D0'
34387
34388   * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
34389     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
34390     D0, D0, D0' _or_ `vbif D0, D0, D0'
34391
34392   * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
34393     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
34394     D0, D0, D0' _or_ `vbif D0, D0, D0'
34395
34396   * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t)
34397     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
34398     D0, D0, D0' _or_ `vbif D0, D0, D0'
34399
34400   * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t)
34401     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
34402     D0, D0, D0' _or_ `vbif D0, D0, D0'
34403
34404   * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t)
34405     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
34406     D0, D0, D0' _or_ `vbif D0, D0, D0'
34407
34408   * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t)
34409     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
34410     D0, D0, D0' _or_ `vbif D0, D0, D0'
34411
34412   * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t)
34413     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
34414     D0, D0, D0' _or_ `vbif D0, D0, D0'
34415
34416   * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t)
34417     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
34418     D0, D0, D0' _or_ `vbif D0, D0, D0'
34419
34420   * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t)
34421     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
34422     D0, D0, D0' _or_ `vbif D0, D0, D0'
34423
34424   * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t)
34425     _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
34426     D0, D0, D0' _or_ `vbif D0, D0, D0'
34427
34428   * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
34429     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
34430     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
34431
34432   * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
34433     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
34434     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
34435
34436   * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
34437     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
34438     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
34439
34440   * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t)
34441     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
34442     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
34443
34444   * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t)
34445     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
34446     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
34447
34448   * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t)
34449     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
34450     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
34451
34452   * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t)
34453     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
34454     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
34455
34456   * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t)
34457     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
34458     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
34459
34460   * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t)
34461     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
34462     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
34463
34464   * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t)
34465     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
34466     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
34467
34468   * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t)
34469     _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
34470     Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
34471
344726.56.3.72 Transpose elements
34473............................
34474
34475   * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t)
34476     _Form of expected instruction(s):_ `vtrn.16 D0, D1'
34477
34478   * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t)
34479     _Form of expected instruction(s):_ `vtrn.8 D0, D1'
34480
34481   * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t)
34482     _Form of expected instruction(s):_ `vtrn.16 D0, D1'
34483
34484   * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t)
34485     _Form of expected instruction(s):_ `vtrn.8 D0, D1'
34486
34487   * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t)
34488     _Form of expected instruction(s):_ `vtrn.16 D0, D1'
34489
34490   * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t)
34491     _Form of expected instruction(s):_ `vtrn.8 D0, D1'
34492
34493   * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t)
34494     _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34495
34496   * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t)
34497     _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34498
34499   * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t)
34500     _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34501
34502   * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t)
34503     _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
34504
34505   * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t)
34506     _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
34507
34508   * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t)
34509     _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
34510
34511   * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t)
34512     _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
34513
34514   * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t)
34515     _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
34516
34517   * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t)
34518     _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
34519
34520   * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t)
34521     _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
34522
34523   * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t)
34524     _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
34525
34526   * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t)
34527     _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
34528
345296.56.3.73 Zip elements
34530......................
34531
34532   * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t)
34533     _Form of expected instruction(s):_ `vzip.16 D0, D1'
34534
34535   * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t)
34536     _Form of expected instruction(s):_ `vzip.8 D0, D1'
34537
34538   * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t)
34539     _Form of expected instruction(s):_ `vzip.16 D0, D1'
34540
34541   * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t)
34542     _Form of expected instruction(s):_ `vzip.8 D0, D1'
34543
34544   * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t)
34545     _Form of expected instruction(s):_ `vzip.16 D0, D1'
34546
34547   * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t)
34548     _Form of expected instruction(s):_ `vzip.8 D0, D1'
34549
34550   * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t)
34551     _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34552
34553   * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t)
34554     _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34555
34556   * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t)
34557     _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34558
34559   * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t)
34560     _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
34561
34562   * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t)
34563     _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
34564
34565   * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t)
34566     _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
34567
34568   * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t)
34569     _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
34570
34571   * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t)
34572     _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
34573
34574   * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t)
34575     _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
34576
34577   * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t)
34578     _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
34579
34580   * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t)
34581     _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
34582
34583   * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t)
34584     _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
34585
345866.56.3.74 Unzip elements
34587........................
34588
34589   * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t)
34590     _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34591
34592   * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t)
34593     _Form of expected instruction(s):_ `vuzp.16 D0, D1'
34594
34595   * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t)
34596     _Form of expected instruction(s):_ `vuzp.8 D0, D1'
34597
34598   * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t)
34599     _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34600
34601   * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t)
34602     _Form of expected instruction(s):_ `vuzp.16 D0, D1'
34603
34604   * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t)
34605     _Form of expected instruction(s):_ `vuzp.8 D0, D1'
34606
34607   * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t)
34608     _Form of expected instruction(s):_ `vuzp.32 D0, D1'
34609
34610   * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t)
34611     _Form of expected instruction(s):_ `vuzp.16 D0, D1'
34612
34613   * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t)
34614     _Form of expected instruction(s):_ `vuzp.8 D0, D1'
34615
34616   * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t)
34617     _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
34618
34619   * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t)
34620     _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
34621
34622   * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t)
34623     _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
34624
34625   * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t)
34626     _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
34627
34628   * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t)
34629     _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
34630
34631   * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t)
34632     _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
34633
34634   * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t)
34635     _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
34636
34637   * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t)
34638     _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
34639
34640   * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t)
34641     _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
34642
346436.56.3.75 Element/structure loads, VLD1 variants
34644................................................
34645
34646   * uint32x2_t vld1_u32 (const uint32_t *)
34647     _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
34648
34649   * uint16x4_t vld1_u16 (const uint16_t *)
34650     _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
34651
34652   * uint8x8_t vld1_u8 (const uint8_t *)
34653     _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
34654
34655   * int32x2_t vld1_s32 (const int32_t *)
34656     _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
34657
34658   * int16x4_t vld1_s16 (const int16_t *)
34659     _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
34660
34661   * int8x8_t vld1_s8 (const int8_t *)
34662     _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
34663
34664   * uint64x1_t vld1_u64 (const uint64_t *)
34665     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34666
34667   * int64x1_t vld1_s64 (const int64_t *)
34668     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34669
34670   * float32x2_t vld1_f32 (const float32_t *)
34671     _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
34672
34673   * poly16x4_t vld1_p16 (const poly16_t *)
34674     _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
34675
34676   * poly8x8_t vld1_p8 (const poly8_t *)
34677     _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
34678
34679   * uint32x4_t vld1q_u32 (const uint32_t *)
34680     _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
34681
34682   * uint16x8_t vld1q_u16 (const uint16_t *)
34683     _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
34684
34685   * uint8x16_t vld1q_u8 (const uint8_t *)
34686     _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
34687
34688   * int32x4_t vld1q_s32 (const int32_t *)
34689     _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
34690
34691   * int16x8_t vld1q_s16 (const int16_t *)
34692     _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
34693
34694   * int8x16_t vld1q_s8 (const int8_t *)
34695     _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
34696
34697   * uint64x2_t vld1q_u64 (const uint64_t *)
34698     _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
34699
34700   * int64x2_t vld1q_s64 (const int64_t *)
34701     _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
34702
34703   * float32x4_t vld1q_f32 (const float32_t *)
34704     _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
34705
34706   * poly16x8_t vld1q_p16 (const poly16_t *)
34707     _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
34708
34709   * poly8x16_t vld1q_p8 (const poly8_t *)
34710     _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
34711
34712   * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int)
34713     _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
34714
34715   * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int)
34716     _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
34717
34718   * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int)
34719     _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
34720
34721   * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int)
34722     _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
34723
34724   * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int)
34725     _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
34726
34727   * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int)
34728     _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
34729
34730   * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const
34731     int)
34732     _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
34733
34734   * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int)
34735     _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
34736
34737   * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int)
34738     _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
34739
34740   * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int)
34741     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34742
34743   * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int)
34744     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34745
34746   * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int)
34747     _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
34748
34749   * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int)
34750     _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
34751
34752   * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int)
34753     _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
34754
34755   * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int)
34756     _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
34757
34758   * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int)
34759     _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
34760
34761   * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int)
34762     _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
34763
34764   * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const
34765     int)
34766     _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
34767
34768   * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int)
34769     _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
34770
34771   * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int)
34772     _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
34773
34774   * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int)
34775     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34776
34777   * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int)
34778     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34779
34780   * uint32x2_t vld1_dup_u32 (const uint32_t *)
34781     _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
34782
34783   * uint16x4_t vld1_dup_u16 (const uint16_t *)
34784     _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
34785
34786   * uint8x8_t vld1_dup_u8 (const uint8_t *)
34787     _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
34788
34789   * int32x2_t vld1_dup_s32 (const int32_t *)
34790     _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
34791
34792   * int16x4_t vld1_dup_s16 (const int16_t *)
34793     _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
34794
34795   * int8x8_t vld1_dup_s8 (const int8_t *)
34796     _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
34797
34798   * float32x2_t vld1_dup_f32 (const float32_t *)
34799     _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
34800
34801   * poly16x4_t vld1_dup_p16 (const poly16_t *)
34802     _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
34803
34804   * poly8x8_t vld1_dup_p8 (const poly8_t *)
34805     _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
34806
34807   * uint64x1_t vld1_dup_u64 (const uint64_t *)
34808     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34809
34810   * int64x1_t vld1_dup_s64 (const int64_t *)
34811     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34812
34813   * uint32x4_t vld1q_dup_u32 (const uint32_t *)
34814     _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
34815
34816   * uint16x8_t vld1q_dup_u16 (const uint16_t *)
34817     _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
34818
34819   * uint8x16_t vld1q_dup_u8 (const uint8_t *)
34820     _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
34821
34822   * int32x4_t vld1q_dup_s32 (const int32_t *)
34823     _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
34824
34825   * int16x8_t vld1q_dup_s16 (const int16_t *)
34826     _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
34827
34828   * int8x16_t vld1q_dup_s8 (const int8_t *)
34829     _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
34830
34831   * float32x4_t vld1q_dup_f32 (const float32_t *)
34832     _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
34833
34834   * poly16x8_t vld1q_dup_p16 (const poly16_t *)
34835     _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
34836
34837   * poly8x16_t vld1q_dup_p8 (const poly8_t *)
34838     _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
34839
34840   * uint64x2_t vld1q_dup_u64 (const uint64_t *)
34841     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34842
34843   * int64x2_t vld1q_dup_s64 (const int64_t *)
34844     _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
34845
348466.56.3.76 Element/structure stores, VST1 variants
34847.................................................
34848
34849   * void vst1_u32 (uint32_t *, uint32x2_t)
34850     _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
34851
34852   * void vst1_u16 (uint16_t *, uint16x4_t)
34853     _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
34854
34855   * void vst1_u8 (uint8_t *, uint8x8_t)
34856     _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
34857
34858   * void vst1_s32 (int32_t *, int32x2_t)
34859     _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
34860
34861   * void vst1_s16 (int16_t *, int16x4_t)
34862     _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
34863
34864   * void vst1_s8 (int8_t *, int8x8_t)
34865     _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
34866
34867   * void vst1_u64 (uint64_t *, uint64x1_t)
34868     _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
34869
34870   * void vst1_s64 (int64_t *, int64x1_t)
34871     _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
34872
34873   * void vst1_f32 (float32_t *, float32x2_t)
34874     _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
34875
34876   * void vst1_p16 (poly16_t *, poly16x4_t)
34877     _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
34878
34879   * void vst1_p8 (poly8_t *, poly8x8_t)
34880     _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
34881
34882   * void vst1q_u32 (uint32_t *, uint32x4_t)
34883     _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
34884
34885   * void vst1q_u16 (uint16_t *, uint16x8_t)
34886     _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
34887
34888   * void vst1q_u8 (uint8_t *, uint8x16_t)
34889     _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
34890
34891   * void vst1q_s32 (int32_t *, int32x4_t)
34892     _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
34893
34894   * void vst1q_s16 (int16_t *, int16x8_t)
34895     _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
34896
34897   * void vst1q_s8 (int8_t *, int8x16_t)
34898     _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
34899
34900   * void vst1q_u64 (uint64_t *, uint64x2_t)
34901     _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
34902
34903   * void vst1q_s64 (int64_t *, int64x2_t)
34904     _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
34905
34906   * void vst1q_f32 (float32_t *, float32x4_t)
34907     _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
34908
34909   * void vst1q_p16 (poly16_t *, poly16x8_t)
34910     _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
34911
34912   * void vst1q_p8 (poly8_t *, poly8x16_t)
34913     _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
34914
34915   * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int)
34916     _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
34917
34918   * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int)
34919     _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
34920
34921   * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int)
34922     _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
34923
34924   * void vst1_lane_s32 (int32_t *, int32x2_t, const int)
34925     _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
34926
34927   * void vst1_lane_s16 (int16_t *, int16x4_t, const int)
34928     _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
34929
34930   * void vst1_lane_s8 (int8_t *, int8x8_t, const int)
34931     _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
34932
34933   * void vst1_lane_f32 (float32_t *, float32x2_t, const int)
34934     _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
34935
34936   * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int)
34937     _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
34938
34939   * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int)
34940     _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
34941
34942   * void vst1_lane_s64 (int64_t *, int64x1_t, const int)
34943     _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
34944
34945   * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int)
34946     _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
34947
34948   * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int)
34949     _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
34950
34951   * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int)
34952     _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
34953
34954   * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int)
34955     _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
34956
34957   * void vst1q_lane_s32 (int32_t *, int32x4_t, const int)
34958     _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
34959
34960   * void vst1q_lane_s16 (int16_t *, int16x8_t, const int)
34961     _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
34962
34963   * void vst1q_lane_s8 (int8_t *, int8x16_t, const int)
34964     _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
34965
34966   * void vst1q_lane_f32 (float32_t *, float32x4_t, const int)
34967     _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
34968
34969   * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int)
34970     _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
34971
34972   * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int)
34973     _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
34974
34975   * void vst1q_lane_s64 (int64_t *, int64x2_t, const int)
34976     _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
34977
34978   * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int)
34979     _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
34980
349816.56.3.77 Element/structure loads, VLD2 variants
34982................................................
34983
34984   * uint32x2x2_t vld2_u32 (const uint32_t *)
34985     _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
34986
34987   * uint16x4x2_t vld2_u16 (const uint16_t *)
34988     _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
34989
34990   * uint8x8x2_t vld2_u8 (const uint8_t *)
34991     _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
34992
34993   * int32x2x2_t vld2_s32 (const int32_t *)
34994     _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
34995
34996   * int16x4x2_t vld2_s16 (const int16_t *)
34997     _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
34998
34999   * int8x8x2_t vld2_s8 (const int8_t *)
35000     _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
35001
35002   * float32x2x2_t vld2_f32 (const float32_t *)
35003     _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
35004
35005   * poly16x4x2_t vld2_p16 (const poly16_t *)
35006     _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
35007
35008   * poly8x8x2_t vld2_p8 (const poly8_t *)
35009     _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
35010
35011   * uint64x1x2_t vld2_u64 (const uint64_t *)
35012     _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
35013
35014   * int64x1x2_t vld2_s64 (const int64_t *)
35015     _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
35016
35017   * uint32x4x2_t vld2q_u32 (const uint32_t *)
35018     _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
35019
35020   * uint16x8x2_t vld2q_u16 (const uint16_t *)
35021     _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
35022
35023   * uint8x16x2_t vld2q_u8 (const uint8_t *)
35024     _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
35025
35026   * int32x4x2_t vld2q_s32 (const int32_t *)
35027     _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
35028
35029   * int16x8x2_t vld2q_s16 (const int16_t *)
35030     _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
35031
35032   * int8x16x2_t vld2q_s8 (const int8_t *)
35033     _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
35034
35035   * float32x4x2_t vld2q_f32 (const float32_t *)
35036     _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
35037
35038   * poly16x8x2_t vld2q_p16 (const poly16_t *)
35039     _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
35040
35041   * poly8x16x2_t vld2q_p8 (const poly8_t *)
35042     _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
35043
35044   * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const
35045     int)
35046     _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
35047
35048   * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const
35049     int)
35050     _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
35051
35052   * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int)
35053     _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
35054
35055   * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int)
35056     _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
35057
35058   * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int)
35059     _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
35060
35061   * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int)
35062     _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
35063
35064   * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t,
35065     const int)
35066     _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
35067
35068   * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const
35069     int)
35070     _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
35071
35072   * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int)
35073     _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
35074
35075   * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const
35076     int)
35077     _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
35078
35079   * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const
35080     int)
35081     _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
35082
35083   * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const
35084     int)
35085     _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
35086
35087   * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const
35088     int)
35089     _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
35090
35091   * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t,
35092     const int)
35093     _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
35094
35095   * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const
35096     int)
35097     _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
35098
35099   * uint32x2x2_t vld2_dup_u32 (const uint32_t *)
35100     _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
35101
35102   * uint16x4x2_t vld2_dup_u16 (const uint16_t *)
35103     _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
35104
35105   * uint8x8x2_t vld2_dup_u8 (const uint8_t *)
35106     _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
35107
35108   * int32x2x2_t vld2_dup_s32 (const int32_t *)
35109     _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
35110
35111   * int16x4x2_t vld2_dup_s16 (const int16_t *)
35112     _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
35113
35114   * int8x8x2_t vld2_dup_s8 (const int8_t *)
35115     _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
35116
35117   * float32x2x2_t vld2_dup_f32 (const float32_t *)
35118     _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
35119
35120   * poly16x4x2_t vld2_dup_p16 (const poly16_t *)
35121     _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
35122
35123   * poly8x8x2_t vld2_dup_p8 (const poly8_t *)
35124     _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
35125
35126   * uint64x1x2_t vld2_dup_u64 (const uint64_t *)
35127     _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
35128
35129   * int64x1x2_t vld2_dup_s64 (const int64_t *)
35130     _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
35131
351326.56.3.78 Element/structure stores, VST2 variants
35133.................................................
35134
35135   * void vst2_u32 (uint32_t *, uint32x2x2_t)
35136     _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
35137
35138   * void vst2_u16 (uint16_t *, uint16x4x2_t)
35139     _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
35140
35141   * void vst2_u8 (uint8_t *, uint8x8x2_t)
35142     _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
35143
35144   * void vst2_s32 (int32_t *, int32x2x2_t)
35145     _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
35146
35147   * void vst2_s16 (int16_t *, int16x4x2_t)
35148     _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
35149
35150   * void vst2_s8 (int8_t *, int8x8x2_t)
35151     _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
35152
35153   * void vst2_f32 (float32_t *, float32x2x2_t)
35154     _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
35155
35156   * void vst2_p16 (poly16_t *, poly16x4x2_t)
35157     _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
35158
35159   * void vst2_p8 (poly8_t *, poly8x8x2_t)
35160     _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
35161
35162   * void vst2_u64 (uint64_t *, uint64x1x2_t)
35163     _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
35164
35165   * void vst2_s64 (int64_t *, int64x1x2_t)
35166     _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
35167
35168   * void vst2q_u32 (uint32_t *, uint32x4x2_t)
35169     _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
35170
35171   * void vst2q_u16 (uint16_t *, uint16x8x2_t)
35172     _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
35173
35174   * void vst2q_u8 (uint8_t *, uint8x16x2_t)
35175     _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
35176
35177   * void vst2q_s32 (int32_t *, int32x4x2_t)
35178     _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
35179
35180   * void vst2q_s16 (int16_t *, int16x8x2_t)
35181     _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
35182
35183   * void vst2q_s8 (int8_t *, int8x16x2_t)
35184     _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
35185
35186   * void vst2q_f32 (float32_t *, float32x4x2_t)
35187     _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
35188
35189   * void vst2q_p16 (poly16_t *, poly16x8x2_t)
35190     _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
35191
35192   * void vst2q_p8 (poly8_t *, poly8x16x2_t)
35193     _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
35194
35195   * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int)
35196     _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
35197
35198   * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int)
35199     _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
35200
35201   * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int)
35202     _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
35203
35204   * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int)
35205     _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
35206
35207   * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int)
35208     _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
35209
35210   * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int)
35211     _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
35212
35213   * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int)
35214     _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
35215
35216   * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int)
35217     _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
35218
35219   * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int)
35220     _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
35221
35222   * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int)
35223     _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
35224
35225   * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int)
35226     _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
35227
35228   * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int)
35229     _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
35230
35231   * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int)
35232     _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
35233
35234   * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int)
35235     _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
35236
35237   * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int)
35238     _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
35239
352406.56.3.79 Element/structure loads, VLD3 variants
35241................................................
35242
35243   * uint32x2x3_t vld3_u32 (const uint32_t *)
35244     _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
35245
35246   * uint16x4x3_t vld3_u16 (const uint16_t *)
35247     _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
35248
35249   * uint8x8x3_t vld3_u8 (const uint8_t *)
35250     _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
35251
35252   * int32x2x3_t vld3_s32 (const int32_t *)
35253     _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
35254
35255   * int16x4x3_t vld3_s16 (const int16_t *)
35256     _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
35257
35258   * int8x8x3_t vld3_s8 (const int8_t *)
35259     _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
35260
35261   * float32x2x3_t vld3_f32 (const float32_t *)
35262     _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
35263
35264   * poly16x4x3_t vld3_p16 (const poly16_t *)
35265     _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
35266
35267   * poly8x8x3_t vld3_p8 (const poly8_t *)
35268     _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
35269
35270   * uint64x1x3_t vld3_u64 (const uint64_t *)
35271     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
35272
35273   * int64x1x3_t vld3_s64 (const int64_t *)
35274     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
35275
35276   * uint32x4x3_t vld3q_u32 (const uint32_t *)
35277     _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
35278
35279   * uint16x8x3_t vld3q_u16 (const uint16_t *)
35280     _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
35281
35282   * uint8x16x3_t vld3q_u8 (const uint8_t *)
35283     _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
35284
35285   * int32x4x3_t vld3q_s32 (const int32_t *)
35286     _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
35287
35288   * int16x8x3_t vld3q_s16 (const int16_t *)
35289     _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
35290
35291   * int8x16x3_t vld3q_s8 (const int8_t *)
35292     _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
35293
35294   * float32x4x3_t vld3q_f32 (const float32_t *)
35295     _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
35296
35297   * poly16x8x3_t vld3q_p16 (const poly16_t *)
35298     _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
35299
35300   * poly8x16x3_t vld3q_p8 (const poly8_t *)
35301     _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
35302
35303   * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const
35304     int)
35305     _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
35306     [R0]'
35307
35308   * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const
35309     int)
35310     _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
35311     [R0]'
35312
35313   * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int)
35314     _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
35315     [R0]'
35316
35317   * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int)
35318     _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
35319     [R0]'
35320
35321   * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int)
35322     _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
35323     [R0]'
35324
35325   * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int)
35326     _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
35327     [R0]'
35328
35329   * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t,
35330     const int)
35331     _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
35332     [R0]'
35333
35334   * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const
35335     int)
35336     _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
35337     [R0]'
35338
35339   * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int)
35340     _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
35341     [R0]'
35342
35343   * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const
35344     int)
35345     _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
35346     [R0]'
35347
35348   * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const
35349     int)
35350     _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
35351     [R0]'
35352
35353   * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const
35354     int)
35355     _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
35356     [R0]'
35357
35358   * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const
35359     int)
35360     _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
35361     [R0]'
35362
35363   * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t,
35364     const int)
35365     _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
35366     [R0]'
35367
35368   * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const
35369     int)
35370     _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
35371     [R0]'
35372
35373   * uint32x2x3_t vld3_dup_u32 (const uint32_t *)
35374     _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
35375     [R0]'
35376
35377   * uint16x4x3_t vld3_dup_u16 (const uint16_t *)
35378     _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
35379     [R0]'
35380
35381   * uint8x8x3_t vld3_dup_u8 (const uint8_t *)
35382     _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
35383     [R0]'
35384
35385   * int32x2x3_t vld3_dup_s32 (const int32_t *)
35386     _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
35387     [R0]'
35388
35389   * int16x4x3_t vld3_dup_s16 (const int16_t *)
35390     _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
35391     [R0]'
35392
35393   * int8x8x3_t vld3_dup_s8 (const int8_t *)
35394     _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
35395     [R0]'
35396
35397   * float32x2x3_t vld3_dup_f32 (const float32_t *)
35398     _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
35399     [R0]'
35400
35401   * poly16x4x3_t vld3_dup_p16 (const poly16_t *)
35402     _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
35403     [R0]'
35404
35405   * poly8x8x3_t vld3_dup_p8 (const poly8_t *)
35406     _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
35407     [R0]'
35408
35409   * uint64x1x3_t vld3_dup_u64 (const uint64_t *)
35410     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
35411
35412   * int64x1x3_t vld3_dup_s64 (const int64_t *)
35413     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
35414
354156.56.3.80 Element/structure stores, VST3 variants
35416.................................................
35417
35418   * void vst3_u32 (uint32_t *, uint32x2x3_t)
35419     _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
35420
35421   * void vst3_u16 (uint16_t *, uint16x4x3_t)
35422     _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
35423
35424   * void vst3_u8 (uint8_t *, uint8x8x3_t)
35425     _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
35426
35427   * void vst3_s32 (int32_t *, int32x2x3_t)
35428     _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
35429
35430   * void vst3_s16 (int16_t *, int16x4x3_t)
35431     _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
35432
35433   * void vst3_s8 (int8_t *, int8x8x3_t)
35434     _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
35435
35436   * void vst3_f32 (float32_t *, float32x2x3_t)
35437     _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
35438
35439   * void vst3_p16 (poly16_t *, poly16x4x3_t)
35440     _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
35441
35442   * void vst3_p8 (poly8_t *, poly8x8x3_t)
35443     _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
35444
35445   * void vst3_u64 (uint64_t *, uint64x1x3_t)
35446     _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
35447
35448   * void vst3_s64 (int64_t *, int64x1x3_t)
35449     _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
35450
35451   * void vst3q_u32 (uint32_t *, uint32x4x3_t)
35452     _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
35453
35454   * void vst3q_u16 (uint16_t *, uint16x8x3_t)
35455     _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
35456
35457   * void vst3q_u8 (uint8_t *, uint8x16x3_t)
35458     _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
35459
35460   * void vst3q_s32 (int32_t *, int32x4x3_t)
35461     _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
35462
35463   * void vst3q_s16 (int16_t *, int16x8x3_t)
35464     _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
35465
35466   * void vst3q_s8 (int8_t *, int8x16x3_t)
35467     _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
35468
35469   * void vst3q_f32 (float32_t *, float32x4x3_t)
35470     _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
35471
35472   * void vst3q_p16 (poly16_t *, poly16x8x3_t)
35473     _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
35474
35475   * void vst3q_p8 (poly8_t *, poly8x16x3_t)
35476     _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
35477
35478   * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int)
35479     _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
35480     [R0]'
35481
35482   * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int)
35483     _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
35484     [R0]'
35485
35486   * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int)
35487     _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
35488     [R0]'
35489
35490   * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int)
35491     _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
35492     [R0]'
35493
35494   * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int)
35495     _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
35496     [R0]'
35497
35498   * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int)
35499     _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
35500     [R0]'
35501
35502   * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int)
35503     _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
35504     [R0]'
35505
35506   * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int)
35507     _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
35508     [R0]'
35509
35510   * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int)
35511     _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
35512     [R0]'
35513
35514   * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int)
35515     _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
35516     [R0]'
35517
35518   * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int)
35519     _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
35520     [R0]'
35521
35522   * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int)
35523     _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
35524     [R0]'
35525
35526   * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int)
35527     _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
35528     [R0]'
35529
35530   * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int)
35531     _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
35532     [R0]'
35533
35534   * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int)
35535     _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
35536     [R0]'
35537
355386.56.3.81 Element/structure loads, VLD4 variants
35539................................................
35540
35541   * uint32x2x4_t vld4_u32 (const uint32_t *)
35542     _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
35543
35544   * uint16x4x4_t vld4_u16 (const uint16_t *)
35545     _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
35546
35547   * uint8x8x4_t vld4_u8 (const uint8_t *)
35548     _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
35549
35550   * int32x2x4_t vld4_s32 (const int32_t *)
35551     _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
35552
35553   * int16x4x4_t vld4_s16 (const int16_t *)
35554     _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
35555
35556   * int8x8x4_t vld4_s8 (const int8_t *)
35557     _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
35558
35559   * float32x2x4_t vld4_f32 (const float32_t *)
35560     _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
35561
35562   * poly16x4x4_t vld4_p16 (const poly16_t *)
35563     _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
35564
35565   * poly8x8x4_t vld4_p8 (const poly8_t *)
35566     _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
35567
35568   * uint64x1x4_t vld4_u64 (const uint64_t *)
35569     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
35570
35571   * int64x1x4_t vld4_s64 (const int64_t *)
35572     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
35573
35574   * uint32x4x4_t vld4q_u32 (const uint32_t *)
35575     _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
35576
35577   * uint16x8x4_t vld4q_u16 (const uint16_t *)
35578     _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
35579
35580   * uint8x16x4_t vld4q_u8 (const uint8_t *)
35581     _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
35582
35583   * int32x4x4_t vld4q_s32 (const int32_t *)
35584     _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
35585
35586   * int16x8x4_t vld4q_s16 (const int16_t *)
35587     _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
35588
35589   * int8x16x4_t vld4q_s8 (const int8_t *)
35590     _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
35591
35592   * float32x4x4_t vld4q_f32 (const float32_t *)
35593     _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
35594
35595   * poly16x8x4_t vld4q_p16 (const poly16_t *)
35596     _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
35597
35598   * poly8x16x4_t vld4q_p8 (const poly8_t *)
35599     _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
35600
35601   * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const
35602     int)
35603     _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
35604     D3[0]}, [R0]'
35605
35606   * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const
35607     int)
35608     _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
35609     D3[0]}, [R0]'
35610
35611   * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int)
35612     _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
35613     D3[0]}, [R0]'
35614
35615   * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int)
35616     _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
35617     D3[0]}, [R0]'
35618
35619   * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int)
35620     _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
35621     D3[0]}, [R0]'
35622
35623   * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int)
35624     _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
35625     D3[0]}, [R0]'
35626
35627   * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t,
35628     const int)
35629     _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
35630     D3[0]}, [R0]'
35631
35632   * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const
35633     int)
35634     _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
35635     D3[0]}, [R0]'
35636
35637   * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int)
35638     _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
35639     D3[0]}, [R0]'
35640
35641   * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const
35642     int)
35643     _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
35644     D3[0]}, [R0]'
35645
35646   * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const
35647     int)
35648     _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
35649     D3[0]}, [R0]'
35650
35651   * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const
35652     int)
35653     _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
35654     D3[0]}, [R0]'
35655
35656   * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const
35657     int)
35658     _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
35659     D3[0]}, [R0]'
35660
35661   * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t,
35662     const int)
35663     _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
35664     D3[0]}, [R0]'
35665
35666   * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const
35667     int)
35668     _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
35669     D3[0]}, [R0]'
35670
35671   * uint32x2x4_t vld4_dup_u32 (const uint32_t *)
35672     _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
35673     D3[]}, [R0]'
35674
35675   * uint16x4x4_t vld4_dup_u16 (const uint16_t *)
35676     _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
35677     D3[]}, [R0]'
35678
35679   * uint8x8x4_t vld4_dup_u8 (const uint8_t *)
35680     _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
35681     D3[]}, [R0]'
35682
35683   * int32x2x4_t vld4_dup_s32 (const int32_t *)
35684     _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
35685     D3[]}, [R0]'
35686
35687   * int16x4x4_t vld4_dup_s16 (const int16_t *)
35688     _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
35689     D3[]}, [R0]'
35690
35691   * int8x8x4_t vld4_dup_s8 (const int8_t *)
35692     _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
35693     D3[]}, [R0]'
35694
35695   * float32x2x4_t vld4_dup_f32 (const float32_t *)
35696     _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
35697     D3[]}, [R0]'
35698
35699   * poly16x4x4_t vld4_dup_p16 (const poly16_t *)
35700     _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
35701     D3[]}, [R0]'
35702
35703   * poly8x8x4_t vld4_dup_p8 (const poly8_t *)
35704     _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
35705     D3[]}, [R0]'
35706
35707   * uint64x1x4_t vld4_dup_u64 (const uint64_t *)
35708     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
35709
35710   * int64x1x4_t vld4_dup_s64 (const int64_t *)
35711     _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
35712
357136.56.3.82 Element/structure stores, VST4 variants
35714.................................................
35715
35716   * void vst4_u32 (uint32_t *, uint32x2x4_t)
35717     _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
35718
35719   * void vst4_u16 (uint16_t *, uint16x4x4_t)
35720     _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
35721
35722   * void vst4_u8 (uint8_t *, uint8x8x4_t)
35723     _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
35724
35725   * void vst4_s32 (int32_t *, int32x2x4_t)
35726     _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
35727
35728   * void vst4_s16 (int16_t *, int16x4x4_t)
35729     _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
35730
35731   * void vst4_s8 (int8_t *, int8x8x4_t)
35732     _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
35733
35734   * void vst4_f32 (float32_t *, float32x2x4_t)
35735     _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
35736
35737   * void vst4_p16 (poly16_t *, poly16x4x4_t)
35738     _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
35739
35740   * void vst4_p8 (poly8_t *, poly8x8x4_t)
35741     _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
35742
35743   * void vst4_u64 (uint64_t *, uint64x1x4_t)
35744     _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
35745
35746   * void vst4_s64 (int64_t *, int64x1x4_t)
35747     _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
35748
35749   * void vst4q_u32 (uint32_t *, uint32x4x4_t)
35750     _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
35751
35752   * void vst4q_u16 (uint16_t *, uint16x8x4_t)
35753     _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
35754
35755   * void vst4q_u8 (uint8_t *, uint8x16x4_t)
35756     _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
35757
35758   * void vst4q_s32 (int32_t *, int32x4x4_t)
35759     _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
35760
35761   * void vst4q_s16 (int16_t *, int16x8x4_t)
35762     _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
35763
35764   * void vst4q_s8 (int8_t *, int8x16x4_t)
35765     _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
35766
35767   * void vst4q_f32 (float32_t *, float32x4x4_t)
35768     _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
35769
35770   * void vst4q_p16 (poly16_t *, poly16x8x4_t)
35771     _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
35772
35773   * void vst4q_p8 (poly8_t *, poly8x16x4_t)
35774     _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
35775
35776   * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int)
35777     _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
35778     D3[0]}, [R0]'
35779
35780   * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int)
35781     _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
35782     D3[0]}, [R0]'
35783
35784   * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int)
35785     _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
35786     D3[0]}, [R0]'
35787
35788   * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int)
35789     _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
35790     D3[0]}, [R0]'
35791
35792   * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int)
35793     _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
35794     D3[0]}, [R0]'
35795
35796   * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int)
35797     _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
35798     D3[0]}, [R0]'
35799
35800   * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int)
35801     _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
35802     D3[0]}, [R0]'
35803
35804   * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int)
35805     _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
35806     D3[0]}, [R0]'
35807
35808   * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int)
35809     _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
35810     D3[0]}, [R0]'
35811
35812   * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int)
35813     _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
35814     D3[0]}, [R0]'
35815
35816   * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int)
35817     _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
35818     D3[0]}, [R0]'
35819
35820   * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int)
35821     _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
35822     D3[0]}, [R0]'
35823
35824   * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int)
35825     _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
35826     D3[0]}, [R0]'
35827
35828   * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int)
35829     _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
35830     D3[0]}, [R0]'
35831
35832   * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int)
35833     _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
35834     D3[0]}, [R0]'
35835
358366.56.3.83 Logical operations (AND)
35837..................................
35838
35839   * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t)
35840     _Form of expected instruction(s):_ `vand D0, D0, D0'
35841
35842   * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t)
35843     _Form of expected instruction(s):_ `vand D0, D0, D0'
35844
35845   * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t)
35846     _Form of expected instruction(s):_ `vand D0, D0, D0'
35847
35848   * int32x2_t vand_s32 (int32x2_t, int32x2_t)
35849     _Form of expected instruction(s):_ `vand D0, D0, D0'
35850
35851   * int16x4_t vand_s16 (int16x4_t, int16x4_t)
35852     _Form of expected instruction(s):_ `vand D0, D0, D0'
35853
35854   * int8x8_t vand_s8 (int8x8_t, int8x8_t)
35855     _Form of expected instruction(s):_ `vand D0, D0, D0'
35856
35857   * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t)
35858
35859   * int64x1_t vand_s64 (int64x1_t, int64x1_t)
35860
35861   * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t)
35862     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35863
35864   * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t)
35865     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35866
35867   * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t)
35868     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35869
35870   * int32x4_t vandq_s32 (int32x4_t, int32x4_t)
35871     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35872
35873   * int16x8_t vandq_s16 (int16x8_t, int16x8_t)
35874     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35875
35876   * int8x16_t vandq_s8 (int8x16_t, int8x16_t)
35877     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35878
35879   * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t)
35880     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35881
35882   * int64x2_t vandq_s64 (int64x2_t, int64x2_t)
35883     _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
35884
358856.56.3.84 Logical operations (OR)
35886.................................
35887
35888   * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t)
35889     _Form of expected instruction(s):_ `vorr D0, D0, D0'
35890
35891   * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t)
35892     _Form of expected instruction(s):_ `vorr D0, D0, D0'
35893
35894   * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t)
35895     _Form of expected instruction(s):_ `vorr D0, D0, D0'
35896
35897   * int32x2_t vorr_s32 (int32x2_t, int32x2_t)
35898     _Form of expected instruction(s):_ `vorr D0, D0, D0'
35899
35900   * int16x4_t vorr_s16 (int16x4_t, int16x4_t)
35901     _Form of expected instruction(s):_ `vorr D0, D0, D0'
35902
35903   * int8x8_t vorr_s8 (int8x8_t, int8x8_t)
35904     _Form of expected instruction(s):_ `vorr D0, D0, D0'
35905
35906   * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t)
35907
35908   * int64x1_t vorr_s64 (int64x1_t, int64x1_t)
35909
35910   * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t)
35911     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35912
35913   * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t)
35914     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35915
35916   * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t)
35917     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35918
35919   * int32x4_t vorrq_s32 (int32x4_t, int32x4_t)
35920     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35921
35922   * int16x8_t vorrq_s16 (int16x8_t, int16x8_t)
35923     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35924
35925   * int8x16_t vorrq_s8 (int8x16_t, int8x16_t)
35926     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35927
35928   * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t)
35929     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35930
35931   * int64x2_t vorrq_s64 (int64x2_t, int64x2_t)
35932     _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
35933
359346.56.3.85 Logical operations (exclusive OR)
35935...........................................
35936
35937   * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t)
35938     _Form of expected instruction(s):_ `veor D0, D0, D0'
35939
35940   * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t)
35941     _Form of expected instruction(s):_ `veor D0, D0, D0'
35942
35943   * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t)
35944     _Form of expected instruction(s):_ `veor D0, D0, D0'
35945
35946   * int32x2_t veor_s32 (int32x2_t, int32x2_t)
35947     _Form of expected instruction(s):_ `veor D0, D0, D0'
35948
35949   * int16x4_t veor_s16 (int16x4_t, int16x4_t)
35950     _Form of expected instruction(s):_ `veor D0, D0, D0'
35951
35952   * int8x8_t veor_s8 (int8x8_t, int8x8_t)
35953     _Form of expected instruction(s):_ `veor D0, D0, D0'
35954
35955   * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t)
35956
35957   * int64x1_t veor_s64 (int64x1_t, int64x1_t)
35958
35959   * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t)
35960     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35961
35962   * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t)
35963     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35964
35965   * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t)
35966     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35967
35968   * int32x4_t veorq_s32 (int32x4_t, int32x4_t)
35969     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35970
35971   * int16x8_t veorq_s16 (int16x8_t, int16x8_t)
35972     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35973
35974   * int8x16_t veorq_s8 (int8x16_t, int8x16_t)
35975     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35976
35977   * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t)
35978     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35979
35980   * int64x2_t veorq_s64 (int64x2_t, int64x2_t)
35981     _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
35982
359836.56.3.86 Logical operations (AND-NOT)
35984......................................
35985
35986   * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t)
35987     _Form of expected instruction(s):_ `vbic D0, D0, D0'
35988
35989   * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t)
35990     _Form of expected instruction(s):_ `vbic D0, D0, D0'
35991
35992   * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t)
35993     _Form of expected instruction(s):_ `vbic D0, D0, D0'
35994
35995   * int32x2_t vbic_s32 (int32x2_t, int32x2_t)
35996     _Form of expected instruction(s):_ `vbic D0, D0, D0'
35997
35998   * int16x4_t vbic_s16 (int16x4_t, int16x4_t)
35999     _Form of expected instruction(s):_ `vbic D0, D0, D0'
36000
36001   * int8x8_t vbic_s8 (int8x8_t, int8x8_t)
36002     _Form of expected instruction(s):_ `vbic D0, D0, D0'
36003
36004   * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t)
36005
36006   * int64x1_t vbic_s64 (int64x1_t, int64x1_t)
36007
36008   * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t)
36009     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
36010
36011   * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t)
36012     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
36013
36014   * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t)
36015     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
36016
36017   * int32x4_t vbicq_s32 (int32x4_t, int32x4_t)
36018     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
36019
36020   * int16x8_t vbicq_s16 (int16x8_t, int16x8_t)
36021     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
36022
36023   * int8x16_t vbicq_s8 (int8x16_t, int8x16_t)
36024     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
36025
36026   * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t)
36027     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
36028
36029   * int64x2_t vbicq_s64 (int64x2_t, int64x2_t)
36030     _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
36031
360326.56.3.87 Logical operations (OR-NOT)
36033.....................................
36034
36035   * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t)
36036     _Form of expected instruction(s):_ `vorn D0, D0, D0'
36037
36038   * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t)
36039     _Form of expected instruction(s):_ `vorn D0, D0, D0'
36040
36041   * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t)
36042     _Form of expected instruction(s):_ `vorn D0, D0, D0'
36043
36044   * int32x2_t vorn_s32 (int32x2_t, int32x2_t)
36045     _Form of expected instruction(s):_ `vorn D0, D0, D0'
36046
36047   * int16x4_t vorn_s16 (int16x4_t, int16x4_t)
36048     _Form of expected instruction(s):_ `vorn D0, D0, D0'
36049
36050   * int8x8_t vorn_s8 (int8x8_t, int8x8_t)
36051     _Form of expected instruction(s):_ `vorn D0, D0, D0'
36052
36053   * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t)
36054
36055   * int64x1_t vorn_s64 (int64x1_t, int64x1_t)
36056
36057   * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t)
36058     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
36059
36060   * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t)
36061     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
36062
36063   * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t)
36064     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
36065
36066   * int32x4_t vornq_s32 (int32x4_t, int32x4_t)
36067     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
36068
36069   * int16x8_t vornq_s16 (int16x8_t, int16x8_t)
36070     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
36071
36072   * int8x16_t vornq_s8 (int8x16_t, int8x16_t)
36073     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
36074
36075   * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t)
36076     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
36077
36078   * int64x2_t vornq_s64 (int64x2_t, int64x2_t)
36079     _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
36080
360816.56.3.88 Reinterpret casts
36082...........................
36083
36084   * poly8x8_t vreinterpret_p8_u32 (uint32x2_t)
36085
36086   * poly8x8_t vreinterpret_p8_u16 (uint16x4_t)
36087
36088   * poly8x8_t vreinterpret_p8_u8 (uint8x8_t)
36089
36090   * poly8x8_t vreinterpret_p8_s32 (int32x2_t)
36091
36092   * poly8x8_t vreinterpret_p8_s16 (int16x4_t)
36093
36094   * poly8x8_t vreinterpret_p8_s8 (int8x8_t)
36095
36096   * poly8x8_t vreinterpret_p8_u64 (uint64x1_t)
36097
36098   * poly8x8_t vreinterpret_p8_s64 (int64x1_t)
36099
36100   * poly8x8_t vreinterpret_p8_f32 (float32x2_t)
36101
36102   * poly8x8_t vreinterpret_p8_p16 (poly16x4_t)
36103
36104   * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t)
36105
36106   * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t)
36107
36108   * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t)
36109
36110   * poly8x16_t vreinterpretq_p8_s32 (int32x4_t)
36111
36112   * poly8x16_t vreinterpretq_p8_s16 (int16x8_t)
36113
36114   * poly8x16_t vreinterpretq_p8_s8 (int8x16_t)
36115
36116   * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t)
36117
36118   * poly8x16_t vreinterpretq_p8_s64 (int64x2_t)
36119
36120   * poly8x16_t vreinterpretq_p8_f32 (float32x4_t)
36121
36122   * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t)
36123
36124   * poly16x4_t vreinterpret_p16_u32 (uint32x2_t)
36125
36126   * poly16x4_t vreinterpret_p16_u16 (uint16x4_t)
36127
36128   * poly16x4_t vreinterpret_p16_u8 (uint8x8_t)
36129
36130   * poly16x4_t vreinterpret_p16_s32 (int32x2_t)
36131
36132   * poly16x4_t vreinterpret_p16_s16 (int16x4_t)
36133
36134   * poly16x4_t vreinterpret_p16_s8 (int8x8_t)
36135
36136   * poly16x4_t vreinterpret_p16_u64 (uint64x1_t)
36137
36138   * poly16x4_t vreinterpret_p16_s64 (int64x1_t)
36139
36140   * poly16x4_t vreinterpret_p16_f32 (float32x2_t)
36141
36142   * poly16x4_t vreinterpret_p16_p8 (poly8x8_t)
36143
36144   * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t)
36145
36146   * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t)
36147
36148   * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t)
36149
36150   * poly16x8_t vreinterpretq_p16_s32 (int32x4_t)
36151
36152   * poly16x8_t vreinterpretq_p16_s16 (int16x8_t)
36153
36154   * poly16x8_t vreinterpretq_p16_s8 (int8x16_t)
36155
36156   * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t)
36157
36158   * poly16x8_t vreinterpretq_p16_s64 (int64x2_t)
36159
36160   * poly16x8_t vreinterpretq_p16_f32 (float32x4_t)
36161
36162   * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t)
36163
36164   * float32x2_t vreinterpret_f32_u32 (uint32x2_t)
36165
36166   * float32x2_t vreinterpret_f32_u16 (uint16x4_t)
36167
36168   * float32x2_t vreinterpret_f32_u8 (uint8x8_t)
36169
36170   * float32x2_t vreinterpret_f32_s32 (int32x2_t)
36171
36172   * float32x2_t vreinterpret_f32_s16 (int16x4_t)
36173
36174   * float32x2_t vreinterpret_f32_s8 (int8x8_t)
36175
36176   * float32x2_t vreinterpret_f32_u64 (uint64x1_t)
36177
36178   * float32x2_t vreinterpret_f32_s64 (int64x1_t)
36179
36180   * float32x2_t vreinterpret_f32_p16 (poly16x4_t)
36181
36182   * float32x2_t vreinterpret_f32_p8 (poly8x8_t)
36183
36184   * float32x4_t vreinterpretq_f32_u32 (uint32x4_t)
36185
36186   * float32x4_t vreinterpretq_f32_u16 (uint16x8_t)
36187
36188   * float32x4_t vreinterpretq_f32_u8 (uint8x16_t)
36189
36190   * float32x4_t vreinterpretq_f32_s32 (int32x4_t)
36191
36192   * float32x4_t vreinterpretq_f32_s16 (int16x8_t)
36193
36194   * float32x4_t vreinterpretq_f32_s8 (int8x16_t)
36195
36196   * float32x4_t vreinterpretq_f32_u64 (uint64x2_t)
36197
36198   * float32x4_t vreinterpretq_f32_s64 (int64x2_t)
36199
36200   * float32x4_t vreinterpretq_f32_p16 (poly16x8_t)
36201
36202   * float32x4_t vreinterpretq_f32_p8 (poly8x16_t)
36203
36204   * int64x1_t vreinterpret_s64_u32 (uint32x2_t)
36205
36206   * int64x1_t vreinterpret_s64_u16 (uint16x4_t)
36207
36208   * int64x1_t vreinterpret_s64_u8 (uint8x8_t)
36209
36210   * int64x1_t vreinterpret_s64_s32 (int32x2_t)
36211
36212   * int64x1_t vreinterpret_s64_s16 (int16x4_t)
36213
36214   * int64x1_t vreinterpret_s64_s8 (int8x8_t)
36215
36216   * int64x1_t vreinterpret_s64_u64 (uint64x1_t)
36217
36218   * int64x1_t vreinterpret_s64_f32 (float32x2_t)
36219
36220   * int64x1_t vreinterpret_s64_p16 (poly16x4_t)
36221
36222   * int64x1_t vreinterpret_s64_p8 (poly8x8_t)
36223
36224   * int64x2_t vreinterpretq_s64_u32 (uint32x4_t)
36225
36226   * int64x2_t vreinterpretq_s64_u16 (uint16x8_t)
36227
36228   * int64x2_t vreinterpretq_s64_u8 (uint8x16_t)
36229
36230   * int64x2_t vreinterpretq_s64_s32 (int32x4_t)
36231
36232   * int64x2_t vreinterpretq_s64_s16 (int16x8_t)
36233
36234   * int64x2_t vreinterpretq_s64_s8 (int8x16_t)
36235
36236   * int64x2_t vreinterpretq_s64_u64 (uint64x2_t)
36237
36238   * int64x2_t vreinterpretq_s64_f32 (float32x4_t)
36239
36240   * int64x2_t vreinterpretq_s64_p16 (poly16x8_t)
36241
36242   * int64x2_t vreinterpretq_s64_p8 (poly8x16_t)
36243
36244   * uint64x1_t vreinterpret_u64_u32 (uint32x2_t)
36245
36246   * uint64x1_t vreinterpret_u64_u16 (uint16x4_t)
36247
36248   * uint64x1_t vreinterpret_u64_u8 (uint8x8_t)
36249
36250   * uint64x1_t vreinterpret_u64_s32 (int32x2_t)
36251
36252   * uint64x1_t vreinterpret_u64_s16 (int16x4_t)
36253
36254   * uint64x1_t vreinterpret_u64_s8 (int8x8_t)
36255
36256   * uint64x1_t vreinterpret_u64_s64 (int64x1_t)
36257
36258   * uint64x1_t vreinterpret_u64_f32 (float32x2_t)
36259
36260   * uint64x1_t vreinterpret_u64_p16 (poly16x4_t)
36261
36262   * uint64x1_t vreinterpret_u64_p8 (poly8x8_t)
36263
36264   * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t)
36265
36266   * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t)
36267
36268   * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t)
36269
36270   * uint64x2_t vreinterpretq_u64_s32 (int32x4_t)
36271
36272   * uint64x2_t vreinterpretq_u64_s16 (int16x8_t)
36273
36274   * uint64x2_t vreinterpretq_u64_s8 (int8x16_t)
36275
36276   * uint64x2_t vreinterpretq_u64_s64 (int64x2_t)
36277
36278   * uint64x2_t vreinterpretq_u64_f32 (float32x4_t)
36279
36280   * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t)
36281
36282   * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t)
36283
36284   * int8x8_t vreinterpret_s8_u32 (uint32x2_t)
36285
36286   * int8x8_t vreinterpret_s8_u16 (uint16x4_t)
36287
36288   * int8x8_t vreinterpret_s8_u8 (uint8x8_t)
36289
36290   * int8x8_t vreinterpret_s8_s32 (int32x2_t)
36291
36292   * int8x8_t vreinterpret_s8_s16 (int16x4_t)
36293
36294   * int8x8_t vreinterpret_s8_u64 (uint64x1_t)
36295
36296   * int8x8_t vreinterpret_s8_s64 (int64x1_t)
36297
36298   * int8x8_t vreinterpret_s8_f32 (float32x2_t)
36299
36300   * int8x8_t vreinterpret_s8_p16 (poly16x4_t)
36301
36302   * int8x8_t vreinterpret_s8_p8 (poly8x8_t)
36303
36304   * int8x16_t vreinterpretq_s8_u32 (uint32x4_t)
36305
36306   * int8x16_t vreinterpretq_s8_u16 (uint16x8_t)
36307
36308   * int8x16_t vreinterpretq_s8_u8 (uint8x16_t)
36309
36310   * int8x16_t vreinterpretq_s8_s32 (int32x4_t)
36311
36312   * int8x16_t vreinterpretq_s8_s16 (int16x8_t)
36313
36314   * int8x16_t vreinterpretq_s8_u64 (uint64x2_t)
36315
36316   * int8x16_t vreinterpretq_s8_s64 (int64x2_t)
36317
36318   * int8x16_t vreinterpretq_s8_f32 (float32x4_t)
36319
36320   * int8x16_t vreinterpretq_s8_p16 (poly16x8_t)
36321
36322   * int8x16_t vreinterpretq_s8_p8 (poly8x16_t)
36323
36324   * int16x4_t vreinterpret_s16_u32 (uint32x2_t)
36325
36326   * int16x4_t vreinterpret_s16_u16 (uint16x4_t)
36327
36328   * int16x4_t vreinterpret_s16_u8 (uint8x8_t)
36329
36330   * int16x4_t vreinterpret_s16_s32 (int32x2_t)
36331
36332   * int16x4_t vreinterpret_s16_s8 (int8x8_t)
36333
36334   * int16x4_t vreinterpret_s16_u64 (uint64x1_t)
36335
36336   * int16x4_t vreinterpret_s16_s64 (int64x1_t)
36337
36338   * int16x4_t vreinterpret_s16_f32 (float32x2_t)
36339
36340   * int16x4_t vreinterpret_s16_p16 (poly16x4_t)
36341
36342   * int16x4_t vreinterpret_s16_p8 (poly8x8_t)
36343
36344   * int16x8_t vreinterpretq_s16_u32 (uint32x4_t)
36345
36346   * int16x8_t vreinterpretq_s16_u16 (uint16x8_t)
36347
36348   * int16x8_t vreinterpretq_s16_u8 (uint8x16_t)
36349
36350   * int16x8_t vreinterpretq_s16_s32 (int32x4_t)
36351
36352   * int16x8_t vreinterpretq_s16_s8 (int8x16_t)
36353
36354   * int16x8_t vreinterpretq_s16_u64 (uint64x2_t)
36355
36356   * int16x8_t vreinterpretq_s16_s64 (int64x2_t)
36357
36358   * int16x8_t vreinterpretq_s16_f32 (float32x4_t)
36359
36360   * int16x8_t vreinterpretq_s16_p16 (poly16x8_t)
36361
36362   * int16x8_t vreinterpretq_s16_p8 (poly8x16_t)
36363
36364   * int32x2_t vreinterpret_s32_u32 (uint32x2_t)
36365
36366   * int32x2_t vreinterpret_s32_u16 (uint16x4_t)
36367
36368   * int32x2_t vreinterpret_s32_u8 (uint8x8_t)
36369
36370   * int32x2_t vreinterpret_s32_s16 (int16x4_t)
36371
36372   * int32x2_t vreinterpret_s32_s8 (int8x8_t)
36373
36374   * int32x2_t vreinterpret_s32_u64 (uint64x1_t)
36375
36376   * int32x2_t vreinterpret_s32_s64 (int64x1_t)
36377
36378   * int32x2_t vreinterpret_s32_f32 (float32x2_t)
36379
36380   * int32x2_t vreinterpret_s32_p16 (poly16x4_t)
36381
36382   * int32x2_t vreinterpret_s32_p8 (poly8x8_t)
36383
36384   * int32x4_t vreinterpretq_s32_u32 (uint32x4_t)
36385
36386   * int32x4_t vreinterpretq_s32_u16 (uint16x8_t)
36387
36388   * int32x4_t vreinterpretq_s32_u8 (uint8x16_t)
36389
36390   * int32x4_t vreinterpretq_s32_s16 (int16x8_t)
36391
36392   * int32x4_t vreinterpretq_s32_s8 (int8x16_t)
36393
36394   * int32x4_t vreinterpretq_s32_u64 (uint64x2_t)
36395
36396   * int32x4_t vreinterpretq_s32_s64 (int64x2_t)
36397
36398   * int32x4_t vreinterpretq_s32_f32 (float32x4_t)
36399
36400   * int32x4_t vreinterpretq_s32_p16 (poly16x8_t)
36401
36402   * int32x4_t vreinterpretq_s32_p8 (poly8x16_t)
36403
36404   * uint8x8_t vreinterpret_u8_u32 (uint32x2_t)
36405
36406   * uint8x8_t vreinterpret_u8_u16 (uint16x4_t)
36407
36408   * uint8x8_t vreinterpret_u8_s32 (int32x2_t)
36409
36410   * uint8x8_t vreinterpret_u8_s16 (int16x4_t)
36411
36412   * uint8x8_t vreinterpret_u8_s8 (int8x8_t)
36413
36414   * uint8x8_t vreinterpret_u8_u64 (uint64x1_t)
36415
36416   * uint8x8_t vreinterpret_u8_s64 (int64x1_t)
36417
36418   * uint8x8_t vreinterpret_u8_f32 (float32x2_t)
36419
36420   * uint8x8_t vreinterpret_u8_p16 (poly16x4_t)
36421
36422   * uint8x8_t vreinterpret_u8_p8 (poly8x8_t)
36423
36424   * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t)
36425
36426   * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t)
36427
36428   * uint8x16_t vreinterpretq_u8_s32 (int32x4_t)
36429
36430   * uint8x16_t vreinterpretq_u8_s16 (int16x8_t)
36431
36432   * uint8x16_t vreinterpretq_u8_s8 (int8x16_t)
36433
36434   * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t)
36435
36436   * uint8x16_t vreinterpretq_u8_s64 (int64x2_t)
36437
36438   * uint8x16_t vreinterpretq_u8_f32 (float32x4_t)
36439
36440   * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t)
36441
36442   * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t)
36443
36444   * uint16x4_t vreinterpret_u16_u32 (uint32x2_t)
36445
36446   * uint16x4_t vreinterpret_u16_u8 (uint8x8_t)
36447
36448   * uint16x4_t vreinterpret_u16_s32 (int32x2_t)
36449
36450   * uint16x4_t vreinterpret_u16_s16 (int16x4_t)
36451
36452   * uint16x4_t vreinterpret_u16_s8 (int8x8_t)
36453
36454   * uint16x4_t vreinterpret_u16_u64 (uint64x1_t)
36455
36456   * uint16x4_t vreinterpret_u16_s64 (int64x1_t)
36457
36458   * uint16x4_t vreinterpret_u16_f32 (float32x2_t)
36459
36460   * uint16x4_t vreinterpret_u16_p16 (poly16x4_t)
36461
36462   * uint16x4_t vreinterpret_u16_p8 (poly8x8_t)
36463
36464   * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t)
36465
36466   * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t)
36467
36468   * uint16x8_t vreinterpretq_u16_s32 (int32x4_t)
36469
36470   * uint16x8_t vreinterpretq_u16_s16 (int16x8_t)
36471
36472   * uint16x8_t vreinterpretq_u16_s8 (int8x16_t)
36473
36474   * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t)
36475
36476   * uint16x8_t vreinterpretq_u16_s64 (int64x2_t)
36477
36478   * uint16x8_t vreinterpretq_u16_f32 (float32x4_t)
36479
36480   * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t)
36481
36482   * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t)
36483
36484   * uint32x2_t vreinterpret_u32_u16 (uint16x4_t)
36485
36486   * uint32x2_t vreinterpret_u32_u8 (uint8x8_t)
36487
36488   * uint32x2_t vreinterpret_u32_s32 (int32x2_t)
36489
36490   * uint32x2_t vreinterpret_u32_s16 (int16x4_t)
36491
36492   * uint32x2_t vreinterpret_u32_s8 (int8x8_t)
36493
36494   * uint32x2_t vreinterpret_u32_u64 (uint64x1_t)
36495
36496   * uint32x2_t vreinterpret_u32_s64 (int64x1_t)
36497
36498   * uint32x2_t vreinterpret_u32_f32 (float32x2_t)
36499
36500   * uint32x2_t vreinterpret_u32_p16 (poly16x4_t)
36501
36502   * uint32x2_t vreinterpret_u32_p8 (poly8x8_t)
36503
36504   * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t)
36505
36506   * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t)
36507
36508   * uint32x4_t vreinterpretq_u32_s32 (int32x4_t)
36509
36510   * uint32x4_t vreinterpretq_u32_s16 (int16x8_t)
36511
36512   * uint32x4_t vreinterpretq_u32_s8 (int8x16_t)
36513
36514   * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t)
36515
36516   * uint32x4_t vreinterpretq_u32_s64 (int64x2_t)
36517
36518   * uint32x4_t vreinterpretq_u32_f32 (float32x4_t)
36519
36520   * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t)
36521
36522   * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t)
36523
36524
36525File: gcc.info,  Node: AVR Built-in Functions,  Next: Blackfin Built-in Functions,  Prev: ARM NEON Intrinsics,  Up: Target Builtins
36526
365276.56.4 AVR Built-in Functions
36528-----------------------------
36529
36530For each built-in function for AVR, there is an equally named,
36531uppercase built-in macro defined. That way users can easily query if or
36532if not a specific built-in is implemented or not. For example, if
36533`__builtin_avr_nop' is available the macro `__BUILTIN_AVR_NOP' is
36534defined to `1' and undefined otherwise.
36535
36536 The following built-in functions map to the respective machine
36537instruction, i.e. `nop', `sei', `cli', `sleep', `wdr', `swap', `fmul',
36538`fmuls' resp. `fmulsu'. The three `fmul*' built-ins are implemented as
36539library call if no hardware multiplier is available.
36540
36541     void __builtin_avr_nop (void)
36542     void __builtin_avr_sei (void)
36543     void __builtin_avr_cli (void)
36544     void __builtin_avr_sleep (void)
36545     void __builtin_avr_wdr (void)
36546     unsigned char __builtin_avr_swap (unsigned char)
36547     unsigned int __builtin_avr_fmul (unsigned char, unsigned char)
36548     int __builtin_avr_fmuls (char, char)
36549     int __builtin_avr_fmulsu (char, unsigned char)
36550
36551 In order to delay execution for a specific number of cycles, GCC
36552implements
36553     void __builtin_avr_delay_cycles (unsigned long ticks)
36554
36555`ticks' is the number of ticks to delay execution. Note that this
36556built-in does not take into account the effect of interrupts that might
36557increase delay time. `ticks' must be a compile-time integer constant;
36558delays with a variable number of cycles are not supported.
36559
36560     char __builtin_avr_flash_segment (const __memx void*)
36561
36562This built-in takes a byte address to the 24-bit *note address space:
36563AVR Named Address Spaces. `__memx' and returns the number of the flash
36564segment (the 64 KiB chunk) where the address points to.  Counting
36565starts at `0'.  If the address does not point to flash memory, return
36566`-1'.
36567
36568     unsigned char __builtin_avr_insert_bits (unsigned long map, unsigned char bits, unsigned char val)
36569
36570Insert bits from BITS into VAL and return the resulting value. The
36571nibbles of MAP determine how the insertion is performed: Let X be the
36572N-th nibble of MAP
36573  1. If X is `0xf', then the N-th bit of VAL is returned unaltered.
36574
36575  2. If X is in the range 0...7, then the N-th result bit is set to the
36576     X-th bit of BITS
36577
36578  3. If X is in the range 8...`0xe', then the N-th result bit is
36579     undefined.
36580
36581One typical use case for this built-in is adjusting input and output
36582values to non-contiguous port layouts. Some examples:
36583
36584     // same as val, bits is unused
36585     __builtin_avr_insert_bits (0xffffffff, bits, val)
36586
36587     // same as bits, val is unused
36588     __builtin_avr_insert_bits (0x76543210, bits, val)
36589
36590     // same as rotating bits by 4
36591     __builtin_avr_insert_bits (0x32107654, bits, 0)
36592
36593     // high nibble of result is the high nibble of val
36594     // low nibble of result is the low nibble of bits
36595     __builtin_avr_insert_bits (0xffff3210, bits, val)
36596
36597     // reverse the bit order of bits
36598     __builtin_avr_insert_bits (0x01234567, bits, 0)
36599
36600
36601File: gcc.info,  Node: Blackfin Built-in Functions,  Next: FR-V Built-in Functions,  Prev: AVR Built-in Functions,  Up: Target Builtins
36602
366036.56.5 Blackfin Built-in Functions
36604----------------------------------
36605
36606Currently, there are two Blackfin-specific built-in functions.  These
36607are used for generating `CSYNC' and `SSYNC' machine insns without using
36608inline assembly; by using these built-in functions the compiler can
36609automatically add workarounds for hardware errata involving these
36610instructions.  These functions are named as follows:
36611
36612     void __builtin_bfin_csync (void)
36613     void __builtin_bfin_ssync (void)
36614
36615
36616File: gcc.info,  Node: FR-V Built-in Functions,  Next: X86 Built-in Functions,  Prev: Blackfin Built-in Functions,  Up: Target Builtins
36617
366186.56.6 FR-V Built-in Functions
36619------------------------------
36620
36621GCC provides many FR-V-specific built-in functions.  In general, these
36622functions are intended to be compatible with those described by `FR-V
36623Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.
36624The two exceptions are `__MDUNPACKH' and `__MBTOHE', the GCC forms of
36625which pass 128-bit values by pointer rather than by value.
36626
36627 Most of the functions are named after specific FR-V instructions.
36628Such functions are said to be "directly mapped" and are summarized here
36629in tabular form.
36630
36631* Menu:
36632
36633* Argument Types::
36634* Directly-mapped Integer Functions::
36635* Directly-mapped Media Functions::
36636* Raw read/write Functions::
36637* Other Built-in Functions::
36638
36639
36640File: gcc.info,  Node: Argument Types,  Next: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
36641
366426.56.6.1 Argument Types
36643.......................
36644
36645The arguments to the built-in functions can be divided into three
36646groups: register numbers, compile-time constants and run-time values.
36647In order to make this classification clear at a glance, the arguments
36648and return values are given the following pseudo types:
36649
36650Pseudo type    Real C type            Constant?   Description
36651`uh'           `unsigned short'       No          an unsigned halfword
36652`uw1'          `unsigned int'         No          an unsigned word
36653`sw1'          `int'                  No          a signed word
36654`uw2'          `unsigned long long'   No          an unsigned doubleword
36655`sw2'          `long long'            No          a signed doubleword
36656`const'        `int'                  Yes         an integer constant
36657`acc'          `int'                  Yes         an ACC register number
36658`iacc'         `int'                  Yes         an IACC register number
36659
36660 These pseudo types are not defined by GCC, they are simply a notational
36661convenience used in this manual.
36662
36663 Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at
36664run time.  They correspond to register operands in the underlying FR-V
36665instructions.
36666
36667 `const' arguments represent immediate operands in the underlying FR-V
36668instructions.  They must be compile-time constants.
36669
36670 `acc' arguments are evaluated at compile time and specify the number
36671of an accumulator register.  For example, an `acc' argument of 2
36672selects the ACC2 register.
36673
36674 `iacc' arguments are similar to `acc' arguments but specify the number
36675of an IACC register.  See *note Other Built-in Functions:: for more
36676details.
36677
36678
36679File: gcc.info,  Node: Directly-mapped Integer Functions,  Next: Directly-mapped Media Functions,  Prev: Argument Types,  Up: FR-V Built-in Functions
36680
366816.56.6.2 Directly-mapped Integer Functions
36682..........................................
36683
36684The functions listed below map directly to FR-V I-type instructions.
36685
36686Function prototype               Example usage           Assembly output
36687`sw1 __ADDSS (sw1, sw1)'         `C = __ADDSS (A, B)'    `ADDSS A,B,C'
36688`sw1 __SCAN (sw1, sw1)'          `C = __SCAN (A, B)'     `SCAN A,B,C'
36689`sw1 __SCUTSS (sw1)'             `B = __SCUTSS (A)'      `SCUTSS A,B'
36690`sw1 __SLASS (sw1, sw1)'         `C = __SLASS (A, B)'    `SLASS A,B,C'
36691`void __SMASS (sw1, sw1)'        `__SMASS (A, B)'        `SMASS A,B'
36692`void __SMSSS (sw1, sw1)'        `__SMSSS (A, B)'        `SMSSS A,B'
36693`void __SMU (sw1, sw1)'          `__SMU (A, B)'          `SMU A,B'
36694`sw2 __SMUL (sw1, sw1)'          `C = __SMUL (A, B)'     `SMUL A,B,C'
36695`sw1 __SUBSS (sw1, sw1)'         `C = __SUBSS (A, B)'    `SUBSS A,B,C'
36696`uw2 __UMUL (uw1, uw1)'          `C = __UMUL (A, B)'     `UMUL A,B,C'
36697
36698
36699File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
36700
367016.56.6.3 Directly-mapped Media Functions
36702........................................
36703
36704The functions listed below map directly to FR-V M-type instructions.
36705
36706Function prototype               Example usage           Assembly output
36707`uw1 __MABSHS (sw1)'             `B = __MABSHS (A)'      `MABSHS A,B'
36708`void __MADDACCS (acc, acc)'     `__MADDACCS (B, A)'     `MADDACCS A,B'
36709`sw1 __MADDHSS (sw1, sw1)'       `C = __MADDHSS (A, B)'  `MADDHSS A,B,C'
36710`uw1 __MADDHUS (uw1, uw1)'       `C = __MADDHUS (A, B)'  `MADDHUS A,B,C'
36711`uw1 __MAND (uw1, uw1)'          `C = __MAND (A, B)'     `MAND A,B,C'
36712`void __MASACCS (acc, acc)'      `__MASACCS (B, A)'      `MASACCS A,B'
36713`uw1 __MAVEH (uw1, uw1)'         `C = __MAVEH (A, B)'    `MAVEH A,B,C'
36714`uw2 __MBTOH (uw1)'              `B = __MBTOH (A)'       `MBTOH A,B'
36715`void __MBTOHE (uw1 *, uw1)'     `__MBTOHE (&B, A)'      `MBTOHE A,B'
36716`void __MCLRACC (acc)'           `__MCLRACC (A)'         `MCLRACC A'
36717`void __MCLRACCA (void)'         `__MCLRACCA ()'         `MCLRACCA'
36718`uw1 __Mcop1 (uw1, uw1)'         `C = __Mcop1 (A, B)'    `Mcop1 A,B,C'
36719`uw1 __Mcop2 (uw1, uw1)'         `C = __Mcop2 (A, B)'    `Mcop2 A,B,C'
36720`uw1 __MCPLHI (uw2, const)'      `C = __MCPLHI (A, B)'   `MCPLHI A,#B,C'
36721`uw1 __MCPLI (uw2, const)'       `C = __MCPLI (A, B)'    `MCPLI A,#B,C'
36722`void __MCPXIS (acc, sw1, sw1)'  `__MCPXIS (C, A, B)'    `MCPXIS A,B,C'
36723`void __MCPXIU (acc, uw1, uw1)'  `__MCPXIU (C, A, B)'    `MCPXIU A,B,C'
36724`void __MCPXRS (acc, sw1, sw1)'  `__MCPXRS (C, A, B)'    `MCPXRS A,B,C'
36725`void __MCPXRU (acc, uw1, uw1)'  `__MCPXRU (C, A, B)'    `MCPXRU A,B,C'
36726`uw1 __MCUT (acc, uw1)'          `C = __MCUT (A, B)'     `MCUT A,B,C'
36727`uw1 __MCUTSS (acc, sw1)'        `C = __MCUTSS (A, B)'   `MCUTSS A,B,C'
36728`void __MDADDACCS (acc, acc)'    `__MDADDACCS (B, A)'    `MDADDACCS A,B'
36729`void __MDASACCS (acc, acc)'     `__MDASACCS (B, A)'     `MDASACCS A,B'
36730`uw2 __MDCUTSSI (acc, const)'    `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C'
36731`uw2 __MDPACKH (uw2, uw2)'       `C = __MDPACKH (A, B)'  `MDPACKH A,B,C'
36732`uw2 __MDROTLI (uw2, const)'     `C = __MDROTLI (A, B)'  `MDROTLI A,#B,C'
36733`void __MDSUBACCS (acc, acc)'    `__MDSUBACCS (B, A)'    `MDSUBACCS A,B'
36734`void __MDUNPACKH (uw1 *, uw2)'  `__MDUNPACKH (&B, A)'   `MDUNPACKH A,B'
36735`uw2 __MEXPDHD (uw1, const)'     `C = __MEXPDHD (A, B)'  `MEXPDHD A,#B,C'
36736`uw1 __MEXPDHW (uw1, const)'     `C = __MEXPDHW (A, B)'  `MEXPDHW A,#B,C'
36737`uw1 __MHDSETH (uw1, const)'     `C = __MHDSETH (A, B)'  `MHDSETH A,#B,C'
36738`sw1 __MHDSETS (const)'          `B = __MHDSETS (A)'     `MHDSETS #A,B'
36739`uw1 __MHSETHIH (uw1, const)'    `B = __MHSETHIH (B, A)' `MHSETHIH #A,B'
36740`sw1 __MHSETHIS (sw1, const)'    `B = __MHSETHIS (B, A)' `MHSETHIS #A,B'
36741`uw1 __MHSETLOH (uw1, const)'    `B = __MHSETLOH (B, A)' `MHSETLOH #A,B'
36742`sw1 __MHSETLOS (sw1, const)'    `B = __MHSETLOS (B, A)' `MHSETLOS #A,B'
36743`uw1 __MHTOB (uw2)'              `B = __MHTOB (A)'       `MHTOB A,B'
36744`void __MMACHS (acc, sw1, sw1)'  `__MMACHS (C, A, B)'    `MMACHS A,B,C'
36745`void __MMACHU (acc, uw1, uw1)'  `__MMACHU (C, A, B)'    `MMACHU A,B,C'
36746`void __MMRDHS (acc, sw1, sw1)'  `__MMRDHS (C, A, B)'    `MMRDHS A,B,C'
36747`void __MMRDHU (acc, uw1, uw1)'  `__MMRDHU (C, A, B)'    `MMRDHU A,B,C'
36748`void __MMULHS (acc, sw1, sw1)'  `__MMULHS (C, A, B)'    `MMULHS A,B,C'
36749`void __MMULHU (acc, uw1, uw1)'  `__MMULHU (C, A, B)'    `MMULHU A,B,C'
36750`void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)'   `MMULXHS A,B,C'
36751`void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)'   `MMULXHU A,B,C'
36752`uw1 __MNOT (uw1)'               `B = __MNOT (A)'        `MNOT A,B'
36753`uw1 __MOR (uw1, uw1)'           `C = __MOR (A, B)'      `MOR A,B,C'
36754`uw1 __MPACKH (uh, uh)'          `C = __MPACKH (A, B)'   `MPACKH A,B,C'
36755`sw2 __MQADDHSS (sw2, sw2)'      `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C'
36756`uw2 __MQADDHUS (uw2, uw2)'      `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C'
36757`void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)'   `MQCPXIS A,B,C'
36758`void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)'   `MQCPXIU A,B,C'
36759`void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)'   `MQCPXRS A,B,C'
36760`void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)'   `MQCPXRU A,B,C'
36761`sw2 __MQLCLRHS (sw2, sw2)'      `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C'
36762`sw2 __MQLMTHS (sw2, sw2)'       `C = __MQLMTHS (A, B)'  `MQLMTHS A,B,C'
36763`void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)'   `MQMACHS A,B,C'
36764`void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)'   `MQMACHU A,B,C'
36765`void __MQMACXHS (acc, sw2,      `__MQMACXHS (C, A, B)'  `MQMACXHS A,B,C'
36766sw2)'
36767`void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)'   `MQMULHS A,B,C'
36768`void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)'   `MQMULHU A,B,C'
36769`void __MQMULXHS (acc, sw2,      `__MQMULXHS (C, A, B)'  `MQMULXHS A,B,C'
36770sw2)'
36771`void __MQMULXHU (acc, uw2,      `__MQMULXHU (C, A, B)'  `MQMULXHU A,B,C'
36772uw2)'
36773`sw2 __MQSATHS (sw2, sw2)'       `C = __MQSATHS (A, B)'  `MQSATHS A,B,C'
36774`uw2 __MQSLLHI (uw2, int)'       `C = __MQSLLHI (A, B)'  `MQSLLHI A,B,C'
36775`sw2 __MQSRAHI (sw2, int)'       `C = __MQSRAHI (A, B)'  `MQSRAHI A,B,C'
36776`sw2 __MQSUBHSS (sw2, sw2)'      `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C'
36777`uw2 __MQSUBHUS (uw2, uw2)'      `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C'
36778`void __MQXMACHS (acc, sw2,      `__MQXMACHS (C, A, B)'  `MQXMACHS A,B,C'
36779sw2)'
36780`void __MQXMACXHS (acc, sw2,     `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C'
36781sw2)'
36782`uw1 __MRDACC (acc)'             `B = __MRDACC (A)'      `MRDACC A,B'
36783`uw1 __MRDACCG (acc)'            `B = __MRDACCG (A)'     `MRDACCG A,B'
36784`uw1 __MROTLI (uw1, const)'      `C = __MROTLI (A, B)'   `MROTLI A,#B,C'
36785`uw1 __MROTRI (uw1, const)'      `C = __MROTRI (A, B)'   `MROTRI A,#B,C'
36786`sw1 __MSATHS (sw1, sw1)'        `C = __MSATHS (A, B)'   `MSATHS A,B,C'
36787`uw1 __MSATHU (uw1, uw1)'        `C = __MSATHU (A, B)'   `MSATHU A,B,C'
36788`uw1 __MSLLHI (uw1, const)'      `C = __MSLLHI (A, B)'   `MSLLHI A,#B,C'
36789`sw1 __MSRAHI (sw1, const)'      `C = __MSRAHI (A, B)'   `MSRAHI A,#B,C'
36790`uw1 __MSRLHI (uw1, const)'      `C = __MSRLHI (A, B)'   `MSRLHI A,#B,C'
36791`void __MSUBACCS (acc, acc)'     `__MSUBACCS (B, A)'     `MSUBACCS A,B'
36792`sw1 __MSUBHSS (sw1, sw1)'       `C = __MSUBHSS (A, B)'  `MSUBHSS A,B,C'
36793`uw1 __MSUBHUS (uw1, uw1)'       `C = __MSUBHUS (A, B)'  `MSUBHUS A,B,C'
36794`void __MTRAP (void)'            `__MTRAP ()'            `MTRAP'
36795`uw2 __MUNPACKH (uw1)'           `B = __MUNPACKH (A)'    `MUNPACKH A,B'
36796`uw1 __MWCUT (uw2, uw1)'         `C = __MWCUT (A, B)'    `MWCUT A,B,C'
36797`void __MWTACC (acc, uw1)'       `__MWTACC (B, A)'       `MWTACC A,B'
36798`void __MWTACCG (acc, uw1)'      `__MWTACCG (B, A)'      `MWTACCG A,B'
36799`uw1 __MXOR (uw1, uw1)'          `C = __MXOR (A, B)'     `MXOR A,B,C'
36800
36801
36802File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions
36803
368046.56.6.4 Raw read/write Functions
36805.................................
36806
36807This sections describes built-in functions related to read and write
36808instructions to access memory.  These functions generate `membar'
36809instructions to flush the I/O load and stores where appropriate, as
36810described in Fujitsu's manual described above.
36811
36812`unsigned char __builtin_read8 (void *DATA)'
36813
36814`unsigned short __builtin_read16 (void *DATA)'
36815
36816`unsigned long __builtin_read32 (void *DATA)'
36817
36818`unsigned long long __builtin_read64 (void *DATA)'
36819
36820`void __builtin_write8 (void *DATA, unsigned char DATUM)'
36821
36822`void __builtin_write16 (void *DATA, unsigned short DATUM)'
36823
36824`void __builtin_write32 (void *DATA, unsigned long DATUM)'
36825
36826`void __builtin_write64 (void *DATA, unsigned long long DATUM)'
36827
36828
36829File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions
36830
368316.56.6.5 Other Built-in Functions
36832.................................
36833
36834This section describes built-in functions that are not named after a
36835specific FR-V instruction.
36836
36837`sw2 __IACCreadll (iacc REG)'
36838     Return the full 64-bit value of IACC0.  The REG argument is
36839     reserved for future expansion and must be 0.
36840
36841`sw1 __IACCreadl (iacc REG)'
36842     Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
36843     Other values of REG are rejected as invalid.
36844
36845`void __IACCsetll (iacc REG, sw2 X)'
36846     Set the full 64-bit value of IACC0 to X.  The REG argument is
36847     reserved for future expansion and must be 0.
36848
36849`void __IACCsetl (iacc REG, sw1 X)'
36850     Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
36851     values of REG are rejected as invalid.
36852
36853`void __data_prefetch0 (const void *X)'
36854     Use the `dcpl' instruction to load the contents of address X into
36855     the data cache.
36856
36857`void __data_prefetch (const void *X)'
36858     Use the `nldub' instruction to load the contents of address X into
36859     the data cache.  The instruction is issued in slot I1.
36860
36861
36862File: gcc.info,  Node: X86 Built-in Functions,  Next: X86 transactional memory intrinsics,  Prev: FR-V Built-in Functions,  Up: Target Builtins
36863
368646.56.7 X86 Built-in Functions
36865-----------------------------
36866
36867These built-in functions are available for the i386 and x86-64 family
36868of computers, depending on the command-line switches used.
36869
36870 If you specify command-line switches such as `-msse', the compiler
36871could use the extended instruction sets even if the built-ins are not
36872used explicitly in the program.  For this reason, applications that
36873perform run-time CPU detection must compile separate files for each
36874supported architecture, using the appropriate flags.  In particular,
36875the file containing the CPU detection code should be compiled without
36876these options.
36877
36878 The following machine modes are available for use with MMX built-in
36879functions (*note Vector Extensions::): `V2SI' for a vector of two
3688032-bit integers, `V4HI' for a vector of four 16-bit integers, and
36881`V8QI' for a vector of eight 8-bit integers.  Some of the built-in
36882functions operate on MMX registers as a whole 64-bit entity, these use
36883`V1DI' as their mode.
36884
36885 If 3DNow! extensions are enabled, `V2SF' is used as a mode for a vector
36886of two 32-bit floating-point values.
36887
36888 If SSE extensions are enabled, `V4SF' is used for a vector of four
3688932-bit floating-point values.  Some instructions use a vector of four
3689032-bit integers, these use `V4SI'.  Finally, some instructions operate
36891on an entire vector register, interpreting it as a 128-bit integer,
36892these use mode `TI'.
36893
36894 In 64-bit mode, the x86-64 family of processors uses additional
36895built-in functions for efficient use of `TF' (`__float128') 128-bit
36896floating point and `TC' 128-bit complex floating-point values.
36897
36898 The following floating-point built-in functions are available in 64-bit
36899mode.  All of them implement the function that is part of the name.
36900
36901     __float128 __builtin_fabsq (__float128)
36902     __float128 __builtin_copysignq (__float128, __float128)
36903
36904 The following built-in function is always available.
36905
36906`void __builtin_ia32_pause (void)'
36907     Generates the `pause' machine instruction with a compiler memory
36908     barrier.
36909
36910 The following floating-point built-in functions are made available in
36911the 64-bit mode.
36912
36913`__float128 __builtin_infq (void)'
36914     Similar to `__builtin_inf', except the return type is `__float128'.
36915
36916`__float128 __builtin_huge_valq (void)'
36917     Similar to `__builtin_huge_val', except the return type is
36918     `__float128'.
36919
36920 The following built-in functions are always available and can be used
36921to check the target platform type.
36922
36923 -- Built-in Function: void __builtin_cpu_init (void)
36924     This function runs the CPU detection code to check the type of CPU
36925     and the features supported.  This built-in function needs to be
36926     invoked along with the built-in functions to check CPU type and
36927     features, `__builtin_cpu_is' and `__builtin_cpu_supports', only
36928     when used in a function that is executed before any constructors
36929     are called.  The CPU detection code is automatically executed in a
36930     very high priority constructor.
36931
36932     For example, this function has to be used in `ifunc' resolvers that
36933     check for CPU type using the built-in functions `__builtin_cpu_is'
36934     and `__builtin_cpu_supports', or in constructors on targets that
36935     don't support constructor priority.
36936
36937          static void (*resolve_memcpy (void)) (void)
36938          {
36939            // ifunc resolvers fire before constructors, explicitly call the init
36940            // function.
36941            __builtin_cpu_init ();
36942            if (__builtin_cpu_supports ("ssse3"))
36943              return ssse3_memcpy; // super fast memcpy with ssse3 instructions.
36944            else
36945              return default_memcpy;
36946          }
36947
36948          void *memcpy (void *, const void *, size_t)
36949               __attribute__ ((ifunc ("resolve_memcpy")));
36950
36951
36952 -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
36953     This function returns a positive integer if the run-time CPU is of
36954     type CPUNAME and returns `0' otherwise. The following CPU names
36955     can be detected:
36956
36957    `intel'
36958          Intel CPU.
36959
36960    `atom'
36961          Intel Atom CPU.
36962
36963    `core2'
36964          Intel Core 2 CPU.
36965
36966    `corei7'
36967          Intel Core i7 CPU.
36968
36969    `nehalem'
36970          Intel Core i7 Nehalem CPU.
36971
36972    `westmere'
36973          Intel Core i7 Westmere CPU.
36974
36975    `sandybridge'
36976          Intel Core i7 Sandy Bridge CPU.
36977
36978    `amd'
36979          AMD CPU.
36980
36981    `amdfam10h'
36982          AMD Family 10h CPU.
36983
36984    `barcelona'
36985          AMD Family 10h Barcelona CPU.
36986
36987    `shanghai'
36988          AMD Family 10h Shanghai CPU.
36989
36990    `istanbul'
36991          AMD Family 10h Istanbul CPU.
36992
36993    `btver1'
36994          AMD Family 14h CPU.
36995
36996    `amdfam15h'
36997          AMD Family 15h CPU.
36998
36999    `bdver1'
37000          AMD Family 15h Bulldozer version 1.
37001
37002    `bdver2'
37003          AMD Family 15h Bulldozer version 2.
37004
37005    `bdver3'
37006          AMD Family 15h Bulldozer version 3.
37007
37008    `btver2'
37009          AMD Family 16h CPU.
37010
37011     Here is an example:
37012          if (__builtin_cpu_is ("corei7"))
37013            {
37014               do_corei7 (); // Core i7 specific implementation.
37015            }
37016          else
37017            {
37018               do_generic (); // Generic implementation.
37019            }
37020
37021 -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
37022     This function returns a positive integer if the run-time CPU
37023     supports FEATURE and returns `0' otherwise. The following features
37024     can be detected:
37025
37026    `cmov'
37027          CMOV instruction.
37028
37029    `mmx'
37030          MMX instructions.
37031
37032    `popcnt'
37033          POPCNT instruction.
37034
37035    `sse'
37036          SSE instructions.
37037
37038    `sse2'
37039          SSE2 instructions.
37040
37041    `sse3'
37042          SSE3 instructions.
37043
37044    `ssse3'
37045          SSSE3 instructions.
37046
37047    `sse4.1'
37048          SSE4.1 instructions.
37049
37050    `sse4.2'
37051          SSE4.2 instructions.
37052
37053    `avx'
37054          AVX instructions.
37055
37056    `avx2'
37057          AVX2 instructions.
37058
37059     Here is an example:
37060          if (__builtin_cpu_supports ("popcnt"))
37061            {
37062               asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc");
37063            }
37064          else
37065            {
37066               count = generic_countbits (n); //generic implementation.
37067            }
37068
37069 The following built-in functions are made available by `-mmmx'.  All
37070of them generate the machine instruction that is part of the name.
37071
37072     v8qi __builtin_ia32_paddb (v8qi, v8qi)
37073     v4hi __builtin_ia32_paddw (v4hi, v4hi)
37074     v2si __builtin_ia32_paddd (v2si, v2si)
37075     v8qi __builtin_ia32_psubb (v8qi, v8qi)
37076     v4hi __builtin_ia32_psubw (v4hi, v4hi)
37077     v2si __builtin_ia32_psubd (v2si, v2si)
37078     v8qi __builtin_ia32_paddsb (v8qi, v8qi)
37079     v4hi __builtin_ia32_paddsw (v4hi, v4hi)
37080     v8qi __builtin_ia32_psubsb (v8qi, v8qi)
37081     v4hi __builtin_ia32_psubsw (v4hi, v4hi)
37082     v8qi __builtin_ia32_paddusb (v8qi, v8qi)
37083     v4hi __builtin_ia32_paddusw (v4hi, v4hi)
37084     v8qi __builtin_ia32_psubusb (v8qi, v8qi)
37085     v4hi __builtin_ia32_psubusw (v4hi, v4hi)
37086     v4hi __builtin_ia32_pmullw (v4hi, v4hi)
37087     v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
37088     di __builtin_ia32_pand (di, di)
37089     di __builtin_ia32_pandn (di,di)
37090     di __builtin_ia32_por (di, di)
37091     di __builtin_ia32_pxor (di, di)
37092     v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
37093     v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
37094     v2si __builtin_ia32_pcmpeqd (v2si, v2si)
37095     v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
37096     v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
37097     v2si __builtin_ia32_pcmpgtd (v2si, v2si)
37098     v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
37099     v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
37100     v2si __builtin_ia32_punpckhdq (v2si, v2si)
37101     v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
37102     v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
37103     v2si __builtin_ia32_punpckldq (v2si, v2si)
37104     v8qi __builtin_ia32_packsswb (v4hi, v4hi)
37105     v4hi __builtin_ia32_packssdw (v2si, v2si)
37106     v8qi __builtin_ia32_packuswb (v4hi, v4hi)
37107
37108     v4hi __builtin_ia32_psllw (v4hi, v4hi)
37109     v2si __builtin_ia32_pslld (v2si, v2si)
37110     v1di __builtin_ia32_psllq (v1di, v1di)
37111     v4hi __builtin_ia32_psrlw (v4hi, v4hi)
37112     v2si __builtin_ia32_psrld (v2si, v2si)
37113     v1di __builtin_ia32_psrlq (v1di, v1di)
37114     v4hi __builtin_ia32_psraw (v4hi, v4hi)
37115     v2si __builtin_ia32_psrad (v2si, v2si)
37116     v4hi __builtin_ia32_psllwi (v4hi, int)
37117     v2si __builtin_ia32_pslldi (v2si, int)
37118     v1di __builtin_ia32_psllqi (v1di, int)
37119     v4hi __builtin_ia32_psrlwi (v4hi, int)
37120     v2si __builtin_ia32_psrldi (v2si, int)
37121     v1di __builtin_ia32_psrlqi (v1di, int)
37122     v4hi __builtin_ia32_psrawi (v4hi, int)
37123     v2si __builtin_ia32_psradi (v2si, int)
37124
37125 The following built-in functions are made available either with
37126`-msse', or with a combination of `-m3dnow' and `-march=athlon'.  All
37127of them generate the machine instruction that is part of the name.
37128
37129     v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
37130     v8qi __builtin_ia32_pavgb (v8qi, v8qi)
37131     v4hi __builtin_ia32_pavgw (v4hi, v4hi)
37132     v1di __builtin_ia32_psadbw (v8qi, v8qi)
37133     v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
37134     v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
37135     v8qi __builtin_ia32_pminub (v8qi, v8qi)
37136     v4hi __builtin_ia32_pminsw (v4hi, v4hi)
37137     int __builtin_ia32_pextrw (v4hi, int)
37138     v4hi __builtin_ia32_pinsrw (v4hi, int, int)
37139     int __builtin_ia32_pmovmskb (v8qi)
37140     void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
37141     void __builtin_ia32_movntq (di *, di)
37142     void __builtin_ia32_sfence (void)
37143
37144 The following built-in functions are available when `-msse' is used.
37145All of them generate the machine instruction that is part of the name.
37146
37147     int __builtin_ia32_comieq (v4sf, v4sf)
37148     int __builtin_ia32_comineq (v4sf, v4sf)
37149     int __builtin_ia32_comilt (v4sf, v4sf)
37150     int __builtin_ia32_comile (v4sf, v4sf)
37151     int __builtin_ia32_comigt (v4sf, v4sf)
37152     int __builtin_ia32_comige (v4sf, v4sf)
37153     int __builtin_ia32_ucomieq (v4sf, v4sf)
37154     int __builtin_ia32_ucomineq (v4sf, v4sf)
37155     int __builtin_ia32_ucomilt (v4sf, v4sf)
37156     int __builtin_ia32_ucomile (v4sf, v4sf)
37157     int __builtin_ia32_ucomigt (v4sf, v4sf)
37158     int __builtin_ia32_ucomige (v4sf, v4sf)
37159     v4sf __builtin_ia32_addps (v4sf, v4sf)
37160     v4sf __builtin_ia32_subps (v4sf, v4sf)
37161     v4sf __builtin_ia32_mulps (v4sf, v4sf)
37162     v4sf __builtin_ia32_divps (v4sf, v4sf)
37163     v4sf __builtin_ia32_addss (v4sf, v4sf)
37164     v4sf __builtin_ia32_subss (v4sf, v4sf)
37165     v4sf __builtin_ia32_mulss (v4sf, v4sf)
37166     v4sf __builtin_ia32_divss (v4sf, v4sf)
37167     v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
37168     v4si __builtin_ia32_cmpltps (v4sf, v4sf)
37169     v4si __builtin_ia32_cmpleps (v4sf, v4sf)
37170     v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
37171     v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
37172     v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
37173     v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
37174     v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
37175     v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
37176     v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
37177     v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
37178     v4si __builtin_ia32_cmpordps (v4sf, v4sf)
37179     v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
37180     v4si __builtin_ia32_cmpltss (v4sf, v4sf)
37181     v4si __builtin_ia32_cmpless (v4sf, v4sf)
37182     v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
37183     v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
37184     v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
37185     v4si __builtin_ia32_cmpnless (v4sf, v4sf)
37186     v4si __builtin_ia32_cmpordss (v4sf, v4sf)
37187     v4sf __builtin_ia32_maxps (v4sf, v4sf)
37188     v4sf __builtin_ia32_maxss (v4sf, v4sf)
37189     v4sf __builtin_ia32_minps (v4sf, v4sf)
37190     v4sf __builtin_ia32_minss (v4sf, v4sf)
37191     v4sf __builtin_ia32_andps (v4sf, v4sf)
37192     v4sf __builtin_ia32_andnps (v4sf, v4sf)
37193     v4sf __builtin_ia32_orps (v4sf, v4sf)
37194     v4sf __builtin_ia32_xorps (v4sf, v4sf)
37195     v4sf __builtin_ia32_movss (v4sf, v4sf)
37196     v4sf __builtin_ia32_movhlps (v4sf, v4sf)
37197     v4sf __builtin_ia32_movlhps (v4sf, v4sf)
37198     v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
37199     v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
37200     v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
37201     v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
37202     v2si __builtin_ia32_cvtps2pi (v4sf)
37203     int __builtin_ia32_cvtss2si (v4sf)
37204     v2si __builtin_ia32_cvttps2pi (v4sf)
37205     int __builtin_ia32_cvttss2si (v4sf)
37206     v4sf __builtin_ia32_rcpps (v4sf)
37207     v4sf __builtin_ia32_rsqrtps (v4sf)
37208     v4sf __builtin_ia32_sqrtps (v4sf)
37209     v4sf __builtin_ia32_rcpss (v4sf)
37210     v4sf __builtin_ia32_rsqrtss (v4sf)
37211     v4sf __builtin_ia32_sqrtss (v4sf)
37212     v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
37213     void __builtin_ia32_movntps (float *, v4sf)
37214     int __builtin_ia32_movmskps (v4sf)
37215
37216 The following built-in functions are available when `-msse' is used.
37217
37218`v4sf __builtin_ia32_loadaps (float *)'
37219     Generates the `movaps' machine instruction as a load from memory.
37220
37221`void __builtin_ia32_storeaps (float *, v4sf)'
37222     Generates the `movaps' machine instruction as a store to memory.
37223
37224`v4sf __builtin_ia32_loadups (float *)'
37225     Generates the `movups' machine instruction as a load from memory.
37226
37227`void __builtin_ia32_storeups (float *, v4sf)'
37228     Generates the `movups' machine instruction as a store to memory.
37229
37230`v4sf __builtin_ia32_loadsss (float *)'
37231     Generates the `movss' machine instruction as a load from memory.
37232
37233`void __builtin_ia32_storess (float *, v4sf)'
37234     Generates the `movss' machine instruction as a store to memory.
37235
37236`v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)'
37237     Generates the `movhps' machine instruction as a load from memory.
37238
37239`v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)'
37240     Generates the `movlps' machine instruction as a load from memory
37241
37242`void __builtin_ia32_storehps (v2sf *, v4sf)'
37243     Generates the `movhps' machine instruction as a store to memory.
37244
37245`void __builtin_ia32_storelps (v2sf *, v4sf)'
37246     Generates the `movlps' machine instruction as a store to memory.
37247
37248 The following built-in functions are available when `-msse2' is used.
37249All of them generate the machine instruction that is part of the name.
37250
37251     int __builtin_ia32_comisdeq (v2df, v2df)
37252     int __builtin_ia32_comisdlt (v2df, v2df)
37253     int __builtin_ia32_comisdle (v2df, v2df)
37254     int __builtin_ia32_comisdgt (v2df, v2df)
37255     int __builtin_ia32_comisdge (v2df, v2df)
37256     int __builtin_ia32_comisdneq (v2df, v2df)
37257     int __builtin_ia32_ucomisdeq (v2df, v2df)
37258     int __builtin_ia32_ucomisdlt (v2df, v2df)
37259     int __builtin_ia32_ucomisdle (v2df, v2df)
37260     int __builtin_ia32_ucomisdgt (v2df, v2df)
37261     int __builtin_ia32_ucomisdge (v2df, v2df)
37262     int __builtin_ia32_ucomisdneq (v2df, v2df)
37263     v2df __builtin_ia32_cmpeqpd (v2df, v2df)
37264     v2df __builtin_ia32_cmpltpd (v2df, v2df)
37265     v2df __builtin_ia32_cmplepd (v2df, v2df)
37266     v2df __builtin_ia32_cmpgtpd (v2df, v2df)
37267     v2df __builtin_ia32_cmpgepd (v2df, v2df)
37268     v2df __builtin_ia32_cmpunordpd (v2df, v2df)
37269     v2df __builtin_ia32_cmpneqpd (v2df, v2df)
37270     v2df __builtin_ia32_cmpnltpd (v2df, v2df)
37271     v2df __builtin_ia32_cmpnlepd (v2df, v2df)
37272     v2df __builtin_ia32_cmpngtpd (v2df, v2df)
37273     v2df __builtin_ia32_cmpngepd (v2df, v2df)
37274     v2df __builtin_ia32_cmpordpd (v2df, v2df)
37275     v2df __builtin_ia32_cmpeqsd (v2df, v2df)
37276     v2df __builtin_ia32_cmpltsd (v2df, v2df)
37277     v2df __builtin_ia32_cmplesd (v2df, v2df)
37278     v2df __builtin_ia32_cmpunordsd (v2df, v2df)
37279     v2df __builtin_ia32_cmpneqsd (v2df, v2df)
37280     v2df __builtin_ia32_cmpnltsd (v2df, v2df)
37281     v2df __builtin_ia32_cmpnlesd (v2df, v2df)
37282     v2df __builtin_ia32_cmpordsd (v2df, v2df)
37283     v2di __builtin_ia32_paddq (v2di, v2di)
37284     v2di __builtin_ia32_psubq (v2di, v2di)
37285     v2df __builtin_ia32_addpd (v2df, v2df)
37286     v2df __builtin_ia32_subpd (v2df, v2df)
37287     v2df __builtin_ia32_mulpd (v2df, v2df)
37288     v2df __builtin_ia32_divpd (v2df, v2df)
37289     v2df __builtin_ia32_addsd (v2df, v2df)
37290     v2df __builtin_ia32_subsd (v2df, v2df)
37291     v2df __builtin_ia32_mulsd (v2df, v2df)
37292     v2df __builtin_ia32_divsd (v2df, v2df)
37293     v2df __builtin_ia32_minpd (v2df, v2df)
37294     v2df __builtin_ia32_maxpd (v2df, v2df)
37295     v2df __builtin_ia32_minsd (v2df, v2df)
37296     v2df __builtin_ia32_maxsd (v2df, v2df)
37297     v2df __builtin_ia32_andpd (v2df, v2df)
37298     v2df __builtin_ia32_andnpd (v2df, v2df)
37299     v2df __builtin_ia32_orpd (v2df, v2df)
37300     v2df __builtin_ia32_xorpd (v2df, v2df)
37301     v2df __builtin_ia32_movsd (v2df, v2df)
37302     v2df __builtin_ia32_unpckhpd (v2df, v2df)
37303     v2df __builtin_ia32_unpcklpd (v2df, v2df)
37304     v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
37305     v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
37306     v4si __builtin_ia32_paddd128 (v4si, v4si)
37307     v2di __builtin_ia32_paddq128 (v2di, v2di)
37308     v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
37309     v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
37310     v4si __builtin_ia32_psubd128 (v4si, v4si)
37311     v2di __builtin_ia32_psubq128 (v2di, v2di)
37312     v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
37313     v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
37314     v2di __builtin_ia32_pand128 (v2di, v2di)
37315     v2di __builtin_ia32_pandn128 (v2di, v2di)
37316     v2di __builtin_ia32_por128 (v2di, v2di)
37317     v2di __builtin_ia32_pxor128 (v2di, v2di)
37318     v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
37319     v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
37320     v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
37321     v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
37322     v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
37323     v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
37324     v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
37325     v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
37326     v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
37327     v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
37328     v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
37329     v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
37330     v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
37331     v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
37332     v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
37333     v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
37334     v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
37335     v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
37336     v4si __builtin_ia32_punpckldq128 (v4si, v4si)
37337     v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
37338     v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
37339     v8hi __builtin_ia32_packssdw128 (v4si, v4si)
37340     v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
37341     v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
37342     void __builtin_ia32_maskmovdqu (v16qi, v16qi)
37343     v2df __builtin_ia32_loadupd (double *)
37344     void __builtin_ia32_storeupd (double *, v2df)
37345     v2df __builtin_ia32_loadhpd (v2df, double const *)
37346     v2df __builtin_ia32_loadlpd (v2df, double const *)
37347     int __builtin_ia32_movmskpd (v2df)
37348     int __builtin_ia32_pmovmskb128 (v16qi)
37349     void __builtin_ia32_movnti (int *, int)
37350     void __builtin_ia32_movnti64 (long long int *, long long int)
37351     void __builtin_ia32_movntpd (double *, v2df)
37352     void __builtin_ia32_movntdq (v2df *, v2df)
37353     v4si __builtin_ia32_pshufd (v4si, int)
37354     v8hi __builtin_ia32_pshuflw (v8hi, int)
37355     v8hi __builtin_ia32_pshufhw (v8hi, int)
37356     v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
37357     v2df __builtin_ia32_sqrtpd (v2df)
37358     v2df __builtin_ia32_sqrtsd (v2df)
37359     v2df __builtin_ia32_shufpd (v2df, v2df, int)
37360     v2df __builtin_ia32_cvtdq2pd (v4si)
37361     v4sf __builtin_ia32_cvtdq2ps (v4si)
37362     v4si __builtin_ia32_cvtpd2dq (v2df)
37363     v2si __builtin_ia32_cvtpd2pi (v2df)
37364     v4sf __builtin_ia32_cvtpd2ps (v2df)
37365     v4si __builtin_ia32_cvttpd2dq (v2df)
37366     v2si __builtin_ia32_cvttpd2pi (v2df)
37367     v2df __builtin_ia32_cvtpi2pd (v2si)
37368     int __builtin_ia32_cvtsd2si (v2df)
37369     int __builtin_ia32_cvttsd2si (v2df)
37370     long long __builtin_ia32_cvtsd2si64 (v2df)
37371     long long __builtin_ia32_cvttsd2si64 (v2df)
37372     v4si __builtin_ia32_cvtps2dq (v4sf)
37373     v2df __builtin_ia32_cvtps2pd (v4sf)
37374     v4si __builtin_ia32_cvttps2dq (v4sf)
37375     v2df __builtin_ia32_cvtsi2sd (v2df, int)
37376     v2df __builtin_ia32_cvtsi642sd (v2df, long long)
37377     v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
37378     v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
37379     void __builtin_ia32_clflush (const void *)
37380     void __builtin_ia32_lfence (void)
37381     void __builtin_ia32_mfence (void)
37382     v16qi __builtin_ia32_loaddqu (const char *)
37383     void __builtin_ia32_storedqu (char *, v16qi)
37384     v1di __builtin_ia32_pmuludq (v2si, v2si)
37385     v2di __builtin_ia32_pmuludq128 (v4si, v4si)
37386     v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
37387     v4si __builtin_ia32_pslld128 (v4si, v4si)
37388     v2di __builtin_ia32_psllq128 (v2di, v2di)
37389     v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
37390     v4si __builtin_ia32_psrld128 (v4si, v4si)
37391     v2di __builtin_ia32_psrlq128 (v2di, v2di)
37392     v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
37393     v4si __builtin_ia32_psrad128 (v4si, v4si)
37394     v2di __builtin_ia32_pslldqi128 (v2di, int)
37395     v8hi __builtin_ia32_psllwi128 (v8hi, int)
37396     v4si __builtin_ia32_pslldi128 (v4si, int)
37397     v2di __builtin_ia32_psllqi128 (v2di, int)
37398     v2di __builtin_ia32_psrldqi128 (v2di, int)
37399     v8hi __builtin_ia32_psrlwi128 (v8hi, int)
37400     v4si __builtin_ia32_psrldi128 (v4si, int)
37401     v2di __builtin_ia32_psrlqi128 (v2di, int)
37402     v8hi __builtin_ia32_psrawi128 (v8hi, int)
37403     v4si __builtin_ia32_psradi128 (v4si, int)
37404     v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
37405     v2di __builtin_ia32_movq128 (v2di)
37406
37407 The following built-in functions are available when `-msse3' is used.
37408All of them generate the machine instruction that is part of the name.
37409
37410     v2df __builtin_ia32_addsubpd (v2df, v2df)
37411     v4sf __builtin_ia32_addsubps (v4sf, v4sf)
37412     v2df __builtin_ia32_haddpd (v2df, v2df)
37413     v4sf __builtin_ia32_haddps (v4sf, v4sf)
37414     v2df __builtin_ia32_hsubpd (v2df, v2df)
37415     v4sf __builtin_ia32_hsubps (v4sf, v4sf)
37416     v16qi __builtin_ia32_lddqu (char const *)
37417     void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
37418     v2df __builtin_ia32_movddup (v2df)
37419     v4sf __builtin_ia32_movshdup (v4sf)
37420     v4sf __builtin_ia32_movsldup (v4sf)
37421     void __builtin_ia32_mwait (unsigned int, unsigned int)
37422
37423 The following built-in functions are available when `-msse3' is used.
37424
37425`v2df __builtin_ia32_loadddup (double const *)'
37426     Generates the `movddup' machine instruction as a load from memory.
37427
37428 The following built-in functions are available when `-mssse3' is used.
37429All of them generate the machine instruction that is part of the name
37430with MMX registers.
37431
37432     v2si __builtin_ia32_phaddd (v2si, v2si)
37433     v4hi __builtin_ia32_phaddw (v4hi, v4hi)
37434     v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
37435     v2si __builtin_ia32_phsubd (v2si, v2si)
37436     v4hi __builtin_ia32_phsubw (v4hi, v4hi)
37437     v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
37438     v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
37439     v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
37440     v8qi __builtin_ia32_pshufb (v8qi, v8qi)
37441     v8qi __builtin_ia32_psignb (v8qi, v8qi)
37442     v2si __builtin_ia32_psignd (v2si, v2si)
37443     v4hi __builtin_ia32_psignw (v4hi, v4hi)
37444     v1di __builtin_ia32_palignr (v1di, v1di, int)
37445     v8qi __builtin_ia32_pabsb (v8qi)
37446     v2si __builtin_ia32_pabsd (v2si)
37447     v4hi __builtin_ia32_pabsw (v4hi)
37448
37449 The following built-in functions are available when `-mssse3' is used.
37450All of them generate the machine instruction that is part of the name
37451with SSE registers.
37452
37453     v4si __builtin_ia32_phaddd128 (v4si, v4si)
37454     v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
37455     v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
37456     v4si __builtin_ia32_phsubd128 (v4si, v4si)
37457     v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
37458     v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
37459     v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
37460     v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
37461     v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
37462     v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
37463     v4si __builtin_ia32_psignd128 (v4si, v4si)
37464     v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
37465     v2di __builtin_ia32_palignr128 (v2di, v2di, int)
37466     v16qi __builtin_ia32_pabsb128 (v16qi)
37467     v4si __builtin_ia32_pabsd128 (v4si)
37468     v8hi __builtin_ia32_pabsw128 (v8hi)
37469
37470 The following built-in functions are available when `-msse4.1' is
37471used.  All of them generate the machine instruction that is part of the
37472name.
37473
37474     v2df __builtin_ia32_blendpd (v2df, v2df, const int)
37475     v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
37476     v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
37477     v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
37478     v2df __builtin_ia32_dppd (v2df, v2df, const int)
37479     v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
37480     v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
37481     v2di __builtin_ia32_movntdqa (v2di *);
37482     v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
37483     v8hi __builtin_ia32_packusdw128 (v4si, v4si)
37484     v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
37485     v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
37486     v2di __builtin_ia32_pcmpeqq (v2di, v2di)
37487     v8hi __builtin_ia32_phminposuw128 (v8hi)
37488     v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
37489     v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
37490     v4si __builtin_ia32_pmaxud128 (v4si, v4si)
37491     v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
37492     v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
37493     v4si __builtin_ia32_pminsd128 (v4si, v4si)
37494     v4si __builtin_ia32_pminud128 (v4si, v4si)
37495     v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
37496     v4si __builtin_ia32_pmovsxbd128 (v16qi)
37497     v2di __builtin_ia32_pmovsxbq128 (v16qi)
37498     v8hi __builtin_ia32_pmovsxbw128 (v16qi)
37499     v2di __builtin_ia32_pmovsxdq128 (v4si)
37500     v4si __builtin_ia32_pmovsxwd128 (v8hi)
37501     v2di __builtin_ia32_pmovsxwq128 (v8hi)
37502     v4si __builtin_ia32_pmovzxbd128 (v16qi)
37503     v2di __builtin_ia32_pmovzxbq128 (v16qi)
37504     v8hi __builtin_ia32_pmovzxbw128 (v16qi)
37505     v2di __builtin_ia32_pmovzxdq128 (v4si)
37506     v4si __builtin_ia32_pmovzxwd128 (v8hi)
37507     v2di __builtin_ia32_pmovzxwq128 (v8hi)
37508     v2di __builtin_ia32_pmuldq128 (v4si, v4si)
37509     v4si __builtin_ia32_pmulld128 (v4si, v4si)
37510     int __builtin_ia32_ptestc128 (v2di, v2di)
37511     int __builtin_ia32_ptestnzc128 (v2di, v2di)
37512     int __builtin_ia32_ptestz128 (v2di, v2di)
37513     v2df __builtin_ia32_roundpd (v2df, const int)
37514     v4sf __builtin_ia32_roundps (v4sf, const int)
37515     v2df __builtin_ia32_roundsd (v2df, v2df, const int)
37516     v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
37517
37518 The following built-in functions are available when `-msse4.1' is used.
37519
37520`v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)'
37521     Generates the `insertps' machine instruction.
37522
37523`int __builtin_ia32_vec_ext_v16qi (v16qi, const int)'
37524     Generates the `pextrb' machine instruction.
37525
37526`v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)'
37527     Generates the `pinsrb' machine instruction.
37528
37529`v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)'
37530     Generates the `pinsrd' machine instruction.
37531
37532`v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)'
37533     Generates the `pinsrq' machine instruction in 64bit mode.
37534
37535 The following built-in functions are changed to generate new SSE4.1
37536instructions when `-msse4.1' is used.
37537
37538`float __builtin_ia32_vec_ext_v4sf (v4sf, const int)'
37539     Generates the `extractps' machine instruction.
37540
37541`int __builtin_ia32_vec_ext_v4si (v4si, const int)'
37542     Generates the `pextrd' machine instruction.
37543
37544`long long __builtin_ia32_vec_ext_v2di (v2di, const int)'
37545     Generates the `pextrq' machine instruction in 64bit mode.
37546
37547 The following built-in functions are available when `-msse4.2' is
37548used.  All of them generate the machine instruction that is part of the
37549name.
37550
37551     v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
37552     int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
37553     int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
37554     int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
37555     int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
37556     int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
37557     int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
37558     v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
37559     int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
37560     int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
37561     int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
37562     int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
37563     int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
37564     int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
37565     v2di __builtin_ia32_pcmpgtq (v2di, v2di)
37566
37567 The following built-in functions are available when `-msse4.2' is used.
37568
37569`unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)'
37570     Generates the `crc32b' machine instruction.
37571
37572`unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)'
37573     Generates the `crc32w' machine instruction.
37574
37575`unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)'
37576     Generates the `crc32l' machine instruction.
37577
37578`unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)'
37579     Generates the `crc32q' machine instruction.
37580
37581 The following built-in functions are changed to generate new SSE4.2
37582instructions when `-msse4.2' is used.
37583
37584`int __builtin_popcount (unsigned int)'
37585     Generates the `popcntl' machine instruction.
37586
37587`int __builtin_popcountl (unsigned long)'
37588     Generates the `popcntl' or `popcntq' machine instruction,
37589     depending on the size of `unsigned long'.
37590
37591`int __builtin_popcountll (unsigned long long)'
37592     Generates the `popcntq' machine instruction.
37593
37594 The following built-in functions are available when `-mavx' is used.
37595All of them generate the machine instruction that is part of the name.
37596
37597     v4df __builtin_ia32_addpd256 (v4df,v4df)
37598     v8sf __builtin_ia32_addps256 (v8sf,v8sf)
37599     v4df __builtin_ia32_addsubpd256 (v4df,v4df)
37600     v8sf __builtin_ia32_addsubps256 (v8sf,v8sf)
37601     v4df __builtin_ia32_andnpd256 (v4df,v4df)
37602     v8sf __builtin_ia32_andnps256 (v8sf,v8sf)
37603     v4df __builtin_ia32_andpd256 (v4df,v4df)
37604     v8sf __builtin_ia32_andps256 (v8sf,v8sf)
37605     v4df __builtin_ia32_blendpd256 (v4df,v4df,int)
37606     v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int)
37607     v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df)
37608     v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf)
37609     v2df __builtin_ia32_cmppd (v2df,v2df,int)
37610     v4df __builtin_ia32_cmppd256 (v4df,v4df,int)
37611     v4sf __builtin_ia32_cmpps (v4sf,v4sf,int)
37612     v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int)
37613     v2df __builtin_ia32_cmpsd (v2df,v2df,int)
37614     v4sf __builtin_ia32_cmpss (v4sf,v4sf,int)
37615     v4df __builtin_ia32_cvtdq2pd256 (v4si)
37616     v8sf __builtin_ia32_cvtdq2ps256 (v8si)
37617     v4si __builtin_ia32_cvtpd2dq256 (v4df)
37618     v4sf __builtin_ia32_cvtpd2ps256 (v4df)
37619     v8si __builtin_ia32_cvtps2dq256 (v8sf)
37620     v4df __builtin_ia32_cvtps2pd256 (v4sf)
37621     v4si __builtin_ia32_cvttpd2dq256 (v4df)
37622     v8si __builtin_ia32_cvttps2dq256 (v8sf)
37623     v4df __builtin_ia32_divpd256 (v4df,v4df)
37624     v8sf __builtin_ia32_divps256 (v8sf,v8sf)
37625     v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int)
37626     v4df __builtin_ia32_haddpd256 (v4df,v4df)
37627     v8sf __builtin_ia32_haddps256 (v8sf,v8sf)
37628     v4df __builtin_ia32_hsubpd256 (v4df,v4df)
37629     v8sf __builtin_ia32_hsubps256 (v8sf,v8sf)
37630     v32qi __builtin_ia32_lddqu256 (pcchar)
37631     v32qi __builtin_ia32_loaddqu256 (pcchar)
37632     v4df __builtin_ia32_loadupd256 (pcdouble)
37633     v8sf __builtin_ia32_loadups256 (pcfloat)
37634     v2df __builtin_ia32_maskloadpd (pcv2df,v2df)
37635     v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df)
37636     v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf)
37637     v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf)
37638     void __builtin_ia32_maskstorepd (pv2df,v2df,v2df)
37639     void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df)
37640     void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf)
37641     void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf)
37642     v4df __builtin_ia32_maxpd256 (v4df,v4df)
37643     v8sf __builtin_ia32_maxps256 (v8sf,v8sf)
37644     v4df __builtin_ia32_minpd256 (v4df,v4df)
37645     v8sf __builtin_ia32_minps256 (v8sf,v8sf)
37646     v4df __builtin_ia32_movddup256 (v4df)
37647     int __builtin_ia32_movmskpd256 (v4df)
37648     int __builtin_ia32_movmskps256 (v8sf)
37649     v8sf __builtin_ia32_movshdup256 (v8sf)
37650     v8sf __builtin_ia32_movsldup256 (v8sf)
37651     v4df __builtin_ia32_mulpd256 (v4df,v4df)
37652     v8sf __builtin_ia32_mulps256 (v8sf,v8sf)
37653     v4df __builtin_ia32_orpd256 (v4df,v4df)
37654     v8sf __builtin_ia32_orps256 (v8sf,v8sf)
37655     v2df __builtin_ia32_pd_pd256 (v4df)
37656     v4df __builtin_ia32_pd256_pd (v2df)
37657     v4sf __builtin_ia32_ps_ps256 (v8sf)
37658     v8sf __builtin_ia32_ps256_ps (v4sf)
37659     int __builtin_ia32_ptestc256 (v4di,v4di,ptest)
37660     int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest)
37661     int __builtin_ia32_ptestz256 (v4di,v4di,ptest)
37662     v8sf __builtin_ia32_rcpps256 (v8sf)
37663     v4df __builtin_ia32_roundpd256 (v4df,int)
37664     v8sf __builtin_ia32_roundps256 (v8sf,int)
37665     v8sf __builtin_ia32_rsqrtps_nr256 (v8sf)
37666     v8sf __builtin_ia32_rsqrtps256 (v8sf)
37667     v4df __builtin_ia32_shufpd256 (v4df,v4df,int)
37668     v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int)
37669     v4si __builtin_ia32_si_si256 (v8si)
37670     v8si __builtin_ia32_si256_si (v4si)
37671     v4df __builtin_ia32_sqrtpd256 (v4df)
37672     v8sf __builtin_ia32_sqrtps_nr256 (v8sf)
37673     v8sf __builtin_ia32_sqrtps256 (v8sf)
37674     void __builtin_ia32_storedqu256 (pchar,v32qi)
37675     void __builtin_ia32_storeupd256 (pdouble,v4df)
37676     void __builtin_ia32_storeups256 (pfloat,v8sf)
37677     v4df __builtin_ia32_subpd256 (v4df,v4df)
37678     v8sf __builtin_ia32_subps256 (v8sf,v8sf)
37679     v4df __builtin_ia32_unpckhpd256 (v4df,v4df)
37680     v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf)
37681     v4df __builtin_ia32_unpcklpd256 (v4df,v4df)
37682     v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf)
37683     v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df)
37684     v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf)
37685     v4df __builtin_ia32_vbroadcastsd256 (pcdouble)
37686     v4sf __builtin_ia32_vbroadcastss (pcfloat)
37687     v8sf __builtin_ia32_vbroadcastss256 (pcfloat)
37688     v2df __builtin_ia32_vextractf128_pd256 (v4df,int)
37689     v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int)
37690     v4si __builtin_ia32_vextractf128_si256 (v8si,int)
37691     v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int)
37692     v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int)
37693     v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int)
37694     v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int)
37695     v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int)
37696     v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int)
37697     v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int)
37698     v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int)
37699     v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int)
37700     v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int)
37701     v2df __builtin_ia32_vpermilpd (v2df,int)
37702     v4df __builtin_ia32_vpermilpd256 (v4df,int)
37703     v4sf __builtin_ia32_vpermilps (v4sf,int)
37704     v8sf __builtin_ia32_vpermilps256 (v8sf,int)
37705     v2df __builtin_ia32_vpermilvarpd (v2df,v2di)
37706     v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di)
37707     v4sf __builtin_ia32_vpermilvarps (v4sf,v4si)
37708     v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si)
37709     int __builtin_ia32_vtestcpd (v2df,v2df,ptest)
37710     int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest)
37711     int __builtin_ia32_vtestcps (v4sf,v4sf,ptest)
37712     int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest)
37713     int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest)
37714     int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest)
37715     int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest)
37716     int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest)
37717     int __builtin_ia32_vtestzpd (v2df,v2df,ptest)
37718     int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest)
37719     int __builtin_ia32_vtestzps (v4sf,v4sf,ptest)
37720     int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest)
37721     void __builtin_ia32_vzeroall (void)
37722     void __builtin_ia32_vzeroupper (void)
37723     v4df __builtin_ia32_xorpd256 (v4df,v4df)
37724     v8sf __builtin_ia32_xorps256 (v8sf,v8sf)
37725
37726 The following built-in functions are available when `-mavx2' is used.
37727All of them generate the machine instruction that is part of the name.
37728
37729     v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,int)
37730     v32qi __builtin_ia32_pabsb256 (v32qi)
37731     v16hi __builtin_ia32_pabsw256 (v16hi)
37732     v8si __builtin_ia32_pabsd256 (v8si)
37733     v16hi __builtin_ia32_packssdw256 (v8si,v8si)
37734     v32qi __builtin_ia32_packsswb256 (v16hi,v16hi)
37735     v16hi __builtin_ia32_packusdw256 (v8si,v8si)
37736     v32qi __builtin_ia32_packuswb256 (v16hi,v16hi)
37737     v32qi __builtin_ia32_paddb256 (v32qi,v32qi)
37738     v16hi __builtin_ia32_paddw256 (v16hi,v16hi)
37739     v8si __builtin_ia32_paddd256 (v8si,v8si)
37740     v4di __builtin_ia32_paddq256 (v4di,v4di)
37741     v32qi __builtin_ia32_paddsb256 (v32qi,v32qi)
37742     v16hi __builtin_ia32_paddsw256 (v16hi,v16hi)
37743     v32qi __builtin_ia32_paddusb256 (v32qi,v32qi)
37744     v16hi __builtin_ia32_paddusw256 (v16hi,v16hi)
37745     v4di __builtin_ia32_palignr256 (v4di,v4di,int)
37746     v4di __builtin_ia32_andsi256 (v4di,v4di)
37747     v4di __builtin_ia32_andnotsi256 (v4di,v4di)
37748     v32qi __builtin_ia32_pavgb256 (v32qi,v32qi)
37749     v16hi __builtin_ia32_pavgw256 (v16hi,v16hi)
37750     v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi)
37751     v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int)
37752     v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi)
37753     v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi)
37754     v8si __builtin_ia32_pcmpeqd256 (c8si,v8si)
37755     v4di __builtin_ia32_pcmpeqq256 (v4di,v4di)
37756     v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi)
37757     v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi)
37758     v8si __builtin_ia32_pcmpgtd256 (v8si,v8si)
37759     v4di __builtin_ia32_pcmpgtq256 (v4di,v4di)
37760     v16hi __builtin_ia32_phaddw256 (v16hi,v16hi)
37761     v8si __builtin_ia32_phaddd256 (v8si,v8si)
37762     v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi)
37763     v16hi __builtin_ia32_phsubw256 (v16hi,v16hi)
37764     v8si __builtin_ia32_phsubd256 (v8si,v8si)
37765     v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi)
37766     v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi)
37767     v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi)
37768     v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi)
37769     v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi)
37770     v8si __builtin_ia32_pmaxsd256 (v8si,v8si)
37771     v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi)
37772     v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi)
37773     v8si __builtin_ia32_pmaxud256 (v8si,v8si)
37774     v32qi __builtin_ia32_pminsb256 (v32qi,v32qi)
37775     v16hi __builtin_ia32_pminsw256 (v16hi,v16hi)
37776     v8si __builtin_ia32_pminsd256 (v8si,v8si)
37777     v32qi __builtin_ia32_pminub256 (v32qi,v32qi)
37778     v16hi __builtin_ia32_pminuw256 (v16hi,v16hi)
37779     v8si __builtin_ia32_pminud256 (v8si,v8si)
37780     int __builtin_ia32_pmovmskb256 (v32qi)
37781     v16hi __builtin_ia32_pmovsxbw256 (v16qi)
37782     v8si __builtin_ia32_pmovsxbd256 (v16qi)
37783     v4di __builtin_ia32_pmovsxbq256 (v16qi)
37784     v8si __builtin_ia32_pmovsxwd256 (v8hi)
37785     v4di __builtin_ia32_pmovsxwq256 (v8hi)
37786     v4di __builtin_ia32_pmovsxdq256 (v4si)
37787     v16hi __builtin_ia32_pmovzxbw256 (v16qi)
37788     v8si __builtin_ia32_pmovzxbd256 (v16qi)
37789     v4di __builtin_ia32_pmovzxbq256 (v16qi)
37790     v8si __builtin_ia32_pmovzxwd256 (v8hi)
37791     v4di __builtin_ia32_pmovzxwq256 (v8hi)
37792     v4di __builtin_ia32_pmovzxdq256 (v4si)
37793     v4di __builtin_ia32_pmuldq256 (v8si,v8si)
37794     v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi)
37795     v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi)
37796     v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi)
37797     v16hi __builtin_ia32_pmullw256 (v16hi,v16hi)
37798     v8si __builtin_ia32_pmulld256 (v8si,v8si)
37799     v4di __builtin_ia32_pmuludq256 (v8si,v8si)
37800     v4di __builtin_ia32_por256 (v4di,v4di)
37801     v16hi __builtin_ia32_psadbw256 (v32qi,v32qi)
37802     v32qi __builtin_ia32_pshufb256 (v32qi,v32qi)
37803     v8si __builtin_ia32_pshufd256 (v8si,int)
37804     v16hi __builtin_ia32_pshufhw256 (v16hi,int)
37805     v16hi __builtin_ia32_pshuflw256 (v16hi,int)
37806     v32qi __builtin_ia32_psignb256 (v32qi,v32qi)
37807     v16hi __builtin_ia32_psignw256 (v16hi,v16hi)
37808     v8si __builtin_ia32_psignd256 (v8si,v8si)
37809     v4di __builtin_ia32_pslldqi256 (v4di,int)
37810     v16hi __builtin_ia32_psllwi256 (16hi,int)
37811     v16hi __builtin_ia32_psllw256(v16hi,v8hi)
37812     v8si __builtin_ia32_pslldi256 (v8si,int)
37813     v8si __builtin_ia32_pslld256(v8si,v4si)
37814     v4di __builtin_ia32_psllqi256 (v4di,int)
37815     v4di __builtin_ia32_psllq256(v4di,v2di)
37816     v16hi __builtin_ia32_psrawi256 (v16hi,int)
37817     v16hi __builtin_ia32_psraw256 (v16hi,v8hi)
37818     v8si __builtin_ia32_psradi256 (v8si,int)
37819     v8si __builtin_ia32_psrad256 (v8si,v4si)
37820     v4di __builtin_ia32_psrldqi256 (v4di, int)
37821     v16hi __builtin_ia32_psrlwi256 (v16hi,int)
37822     v16hi __builtin_ia32_psrlw256 (v16hi,v8hi)
37823     v8si __builtin_ia32_psrldi256 (v8si,int)
37824     v8si __builtin_ia32_psrld256 (v8si,v4si)
37825     v4di __builtin_ia32_psrlqi256 (v4di,int)
37826     v4di __builtin_ia32_psrlq256(v4di,v2di)
37827     v32qi __builtin_ia32_psubb256 (v32qi,v32qi)
37828     v32hi __builtin_ia32_psubw256 (v16hi,v16hi)
37829     v8si __builtin_ia32_psubd256 (v8si,v8si)
37830     v4di __builtin_ia32_psubq256 (v4di,v4di)
37831     v32qi __builtin_ia32_psubsb256 (v32qi,v32qi)
37832     v16hi __builtin_ia32_psubsw256 (v16hi,v16hi)
37833     v32qi __builtin_ia32_psubusb256 (v32qi,v32qi)
37834     v16hi __builtin_ia32_psubusw256 (v16hi,v16hi)
37835     v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi)
37836     v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi)
37837     v8si __builtin_ia32_punpckhdq256 (v8si,v8si)
37838     v4di __builtin_ia32_punpckhqdq256 (v4di,v4di)
37839     v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi)
37840     v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi)
37841     v8si __builtin_ia32_punpckldq256 (v8si,v8si)
37842     v4di __builtin_ia32_punpcklqdq256 (v4di,v4di)
37843     v4di __builtin_ia32_pxor256 (v4di,v4di)
37844     v4di __builtin_ia32_movntdqa256 (pv4di)
37845     v4sf __builtin_ia32_vbroadcastss_ps (v4sf)
37846     v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf)
37847     v4df __builtin_ia32_vbroadcastsd_pd256 (v2df)
37848     v4di __builtin_ia32_vbroadcastsi256 (v2di)
37849     v4si __builtin_ia32_pblendd128 (v4si,v4si)
37850     v8si __builtin_ia32_pblendd256 (v8si,v8si)
37851     v32qi __builtin_ia32_pbroadcastb256 (v16qi)
37852     v16hi __builtin_ia32_pbroadcastw256 (v8hi)
37853     v8si __builtin_ia32_pbroadcastd256 (v4si)
37854     v4di __builtin_ia32_pbroadcastq256 (v2di)
37855     v16qi __builtin_ia32_pbroadcastb128 (v16qi)
37856     v8hi __builtin_ia32_pbroadcastw128 (v8hi)
37857     v4si __builtin_ia32_pbroadcastd128 (v4si)
37858     v2di __builtin_ia32_pbroadcastq128 (v2di)
37859     v8si __builtin_ia32_permvarsi256 (v8si,v8si)
37860     v4df __builtin_ia32_permdf256 (v4df,int)
37861     v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf)
37862     v4di __builtin_ia32_permdi256 (v4di,int)
37863     v4di __builtin_ia32_permti256 (v4di,v4di,int)
37864     v4di __builtin_ia32_extract128i256 (v4di,int)
37865     v4di __builtin_ia32_insert128i256 (v4di,v2di,int)
37866     v8si __builtin_ia32_maskloadd256 (pcv8si,v8si)
37867     v4di __builtin_ia32_maskloadq256 (pcv4di,v4di)
37868     v4si __builtin_ia32_maskloadd (pcv4si,v4si)
37869     v2di __builtin_ia32_maskloadq (pcv2di,v2di)
37870     void __builtin_ia32_maskstored256 (pv8si,v8si,v8si)
37871     void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di)
37872     void __builtin_ia32_maskstored (pv4si,v4si,v4si)
37873     void __builtin_ia32_maskstoreq (pv2di,v2di,v2di)
37874     v8si __builtin_ia32_psllv8si (v8si,v8si)
37875     v4si __builtin_ia32_psllv4si (v4si,v4si)
37876     v4di __builtin_ia32_psllv4di (v4di,v4di)
37877     v2di __builtin_ia32_psllv2di (v2di,v2di)
37878     v8si __builtin_ia32_psrav8si (v8si,v8si)
37879     v4si __builtin_ia32_psrav4si (v4si,v4si)
37880     v8si __builtin_ia32_psrlv8si (v8si,v8si)
37881     v4si __builtin_ia32_psrlv4si (v4si,v4si)
37882     v4di __builtin_ia32_psrlv4di (v4di,v4di)
37883     v2di __builtin_ia32_psrlv2di (v2di,v2di)
37884     v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int)
37885     v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int)
37886     v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int)
37887     v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int)
37888     v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int)
37889     v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int)
37890     v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int)
37891     v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int)
37892     v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int)
37893     v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int)
37894     v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int)
37895     v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int)
37896     v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int)
37897     v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int)
37898     v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int)
37899     v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int)
37900
37901 The following built-in functions are available when `-maes' is used.
37902All of them generate the machine instruction that is part of the name.
37903
37904     v2di __builtin_ia32_aesenc128 (v2di, v2di)
37905     v2di __builtin_ia32_aesenclast128 (v2di, v2di)
37906     v2di __builtin_ia32_aesdec128 (v2di, v2di)
37907     v2di __builtin_ia32_aesdeclast128 (v2di, v2di)
37908     v2di __builtin_ia32_aeskeygenassist128 (v2di, const int)
37909     v2di __builtin_ia32_aesimc128 (v2di)
37910
37911 The following built-in function is available when `-mpclmul' is used.
37912
37913`v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)'
37914     Generates the `pclmulqdq' machine instruction.
37915
37916 The following built-in function is available when `-mfsgsbase' is
37917used.  All of them generate the machine instruction that is part of the
37918name.
37919
37920     unsigned int __builtin_ia32_rdfsbase32 (void)
37921     unsigned long long __builtin_ia32_rdfsbase64 (void)
37922     unsigned int __builtin_ia32_rdgsbase32 (void)
37923     unsigned long long __builtin_ia32_rdgsbase64 (void)
37924     void _writefsbase_u32 (unsigned int)
37925     void _writefsbase_u64 (unsigned long long)
37926     void _writegsbase_u32 (unsigned int)
37927     void _writegsbase_u64 (unsigned long long)
37928
37929 The following built-in function is available when `-mrdrnd' is used.
37930All of them generate the machine instruction that is part of the name.
37931
37932     unsigned int __builtin_ia32_rdrand16_step (unsigned short *)
37933     unsigned int __builtin_ia32_rdrand32_step (unsigned int *)
37934     unsigned int __builtin_ia32_rdrand64_step (unsigned long long *)
37935
37936 The following built-in functions are available when `-msse4a' is used.
37937All of them generate the machine instruction that is part of the name.
37938
37939     void __builtin_ia32_movntsd (double *, v2df)
37940     void __builtin_ia32_movntss (float *, v4sf)
37941     v2di __builtin_ia32_extrq  (v2di, v16qi)
37942     v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int)
37943     v2di __builtin_ia32_insertq (v2di, v2di)
37944     v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int)
37945
37946 The following built-in functions are available when `-mxop' is used.
37947     v2df __builtin_ia32_vfrczpd (v2df)
37948     v4sf __builtin_ia32_vfrczps (v4sf)
37949     v2df __builtin_ia32_vfrczsd (v2df)
37950     v4sf __builtin_ia32_vfrczss (v4sf)
37951     v4df __builtin_ia32_vfrczpd256 (v4df)
37952     v8sf __builtin_ia32_vfrczps256 (v8sf)
37953     v2di __builtin_ia32_vpcmov (v2di, v2di, v2di)
37954     v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di)
37955     v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si)
37956     v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi)
37957     v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi)
37958     v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df)
37959     v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf)
37960     v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di)
37961     v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si)
37962     v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi)
37963     v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi)
37964     v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df)
37965     v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf)
37966     v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi)
37967     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
37968     v4si __builtin_ia32_vpcomeqd (v4si, v4si)
37969     v2di __builtin_ia32_vpcomeqq (v2di, v2di)
37970     v16qi __builtin_ia32_vpcomequb (v16qi, v16qi)
37971     v4si __builtin_ia32_vpcomequd (v4si, v4si)
37972     v2di __builtin_ia32_vpcomequq (v2di, v2di)
37973     v8hi __builtin_ia32_vpcomequw (v8hi, v8hi)
37974     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
37975     v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi)
37976     v4si __builtin_ia32_vpcomfalsed (v4si, v4si)
37977     v2di __builtin_ia32_vpcomfalseq (v2di, v2di)
37978     v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi)
37979     v4si __builtin_ia32_vpcomfalseud (v4si, v4si)
37980     v2di __builtin_ia32_vpcomfalseuq (v2di, v2di)
37981     v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi)
37982     v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi)
37983     v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi)
37984     v4si __builtin_ia32_vpcomged (v4si, v4si)
37985     v2di __builtin_ia32_vpcomgeq (v2di, v2di)
37986     v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi)
37987     v4si __builtin_ia32_vpcomgeud (v4si, v4si)
37988     v2di __builtin_ia32_vpcomgeuq (v2di, v2di)
37989     v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi)
37990     v8hi __builtin_ia32_vpcomgew (v8hi, v8hi)
37991     v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi)
37992     v4si __builtin_ia32_vpcomgtd (v4si, v4si)
37993     v2di __builtin_ia32_vpcomgtq (v2di, v2di)
37994     v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi)
37995     v4si __builtin_ia32_vpcomgtud (v4si, v4si)
37996     v2di __builtin_ia32_vpcomgtuq (v2di, v2di)
37997     v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi)
37998     v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi)
37999     v16qi __builtin_ia32_vpcomleb (v16qi, v16qi)
38000     v4si __builtin_ia32_vpcomled (v4si, v4si)
38001     v2di __builtin_ia32_vpcomleq (v2di, v2di)
38002     v16qi __builtin_ia32_vpcomleub (v16qi, v16qi)
38003     v4si __builtin_ia32_vpcomleud (v4si, v4si)
38004     v2di __builtin_ia32_vpcomleuq (v2di, v2di)
38005     v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi)
38006     v8hi __builtin_ia32_vpcomlew (v8hi, v8hi)
38007     v16qi __builtin_ia32_vpcomltb (v16qi, v16qi)
38008     v4si __builtin_ia32_vpcomltd (v4si, v4si)
38009     v2di __builtin_ia32_vpcomltq (v2di, v2di)
38010     v16qi __builtin_ia32_vpcomltub (v16qi, v16qi)
38011     v4si __builtin_ia32_vpcomltud (v4si, v4si)
38012     v2di __builtin_ia32_vpcomltuq (v2di, v2di)
38013     v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi)
38014     v8hi __builtin_ia32_vpcomltw (v8hi, v8hi)
38015     v16qi __builtin_ia32_vpcomneb (v16qi, v16qi)
38016     v4si __builtin_ia32_vpcomned (v4si, v4si)
38017     v2di __builtin_ia32_vpcomneq (v2di, v2di)
38018     v16qi __builtin_ia32_vpcomneub (v16qi, v16qi)
38019     v4si __builtin_ia32_vpcomneud (v4si, v4si)
38020     v2di __builtin_ia32_vpcomneuq (v2di, v2di)
38021     v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi)
38022     v8hi __builtin_ia32_vpcomnew (v8hi, v8hi)
38023     v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi)
38024     v4si __builtin_ia32_vpcomtrued (v4si, v4si)
38025     v2di __builtin_ia32_vpcomtrueq (v2di, v2di)
38026     v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi)
38027     v4si __builtin_ia32_vpcomtrueud (v4si, v4si)
38028     v2di __builtin_ia32_vpcomtrueuq (v2di, v2di)
38029     v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi)
38030     v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi)
38031     v4si __builtin_ia32_vphaddbd (v16qi)
38032     v2di __builtin_ia32_vphaddbq (v16qi)
38033     v8hi __builtin_ia32_vphaddbw (v16qi)
38034     v2di __builtin_ia32_vphadddq (v4si)
38035     v4si __builtin_ia32_vphaddubd (v16qi)
38036     v2di __builtin_ia32_vphaddubq (v16qi)
38037     v8hi __builtin_ia32_vphaddubw (v16qi)
38038     v2di __builtin_ia32_vphaddudq (v4si)
38039     v4si __builtin_ia32_vphadduwd (v8hi)
38040     v2di __builtin_ia32_vphadduwq (v8hi)
38041     v4si __builtin_ia32_vphaddwd (v8hi)
38042     v2di __builtin_ia32_vphaddwq (v8hi)
38043     v8hi __builtin_ia32_vphsubbw (v16qi)
38044     v2di __builtin_ia32_vphsubdq (v4si)
38045     v4si __builtin_ia32_vphsubwd (v8hi)
38046     v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si)
38047     v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di)
38048     v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di)
38049     v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si)
38050     v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di)
38051     v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di)
38052     v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si)
38053     v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi)
38054     v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si)
38055     v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi)
38056     v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si)
38057     v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si)
38058     v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi)
38059     v16qi __builtin_ia32_vprotb (v16qi, v16qi)
38060     v4si __builtin_ia32_vprotd (v4si, v4si)
38061     v2di __builtin_ia32_vprotq (v2di, v2di)
38062     v8hi __builtin_ia32_vprotw (v8hi, v8hi)
38063     v16qi __builtin_ia32_vpshab (v16qi, v16qi)
38064     v4si __builtin_ia32_vpshad (v4si, v4si)
38065     v2di __builtin_ia32_vpshaq (v2di, v2di)
38066     v8hi __builtin_ia32_vpshaw (v8hi, v8hi)
38067     v16qi __builtin_ia32_vpshlb (v16qi, v16qi)
38068     v4si __builtin_ia32_vpshld (v4si, v4si)
38069     v2di __builtin_ia32_vpshlq (v2di, v2di)
38070     v8hi __builtin_ia32_vpshlw (v8hi, v8hi)
38071
38072 The following built-in functions are available when `-mfma4' is used.
38073All of them generate the machine instruction that is part of the name
38074with MMX registers.
38075
38076     v2df __builtin_ia32_fmaddpd (v2df, v2df, v2df)
38077     v4sf __builtin_ia32_fmaddps (v4sf, v4sf, v4sf)
38078     v2df __builtin_ia32_fmaddsd (v2df, v2df, v2df)
38079     v4sf __builtin_ia32_fmaddss (v4sf, v4sf, v4sf)
38080     v2df __builtin_ia32_fmsubpd (v2df, v2df, v2df)
38081     v4sf __builtin_ia32_fmsubps (v4sf, v4sf, v4sf)
38082     v2df __builtin_ia32_fmsubsd (v2df, v2df, v2df)
38083     v4sf __builtin_ia32_fmsubss (v4sf, v4sf, v4sf)
38084     v2df __builtin_ia32_fnmaddpd (v2df, v2df, v2df)
38085     v4sf __builtin_ia32_fnmaddps (v4sf, v4sf, v4sf)
38086     v2df __builtin_ia32_fnmaddsd (v2df, v2df, v2df)
38087     v4sf __builtin_ia32_fnmaddss (v4sf, v4sf, v4sf)
38088     v2df __builtin_ia32_fnmsubpd (v2df, v2df, v2df)
38089     v4sf __builtin_ia32_fnmsubps (v4sf, v4sf, v4sf)
38090     v2df __builtin_ia32_fnmsubsd (v2df, v2df, v2df)
38091     v4sf __builtin_ia32_fnmsubss (v4sf, v4sf, v4sf)
38092     v2df __builtin_ia32_fmaddsubpd  (v2df, v2df, v2df)
38093     v4sf __builtin_ia32_fmaddsubps  (v4sf, v4sf, v4sf)
38094     v2df __builtin_ia32_fmsubaddpd  (v2df, v2df, v2df)
38095     v4sf __builtin_ia32_fmsubaddps  (v4sf, v4sf, v4sf)
38096     v4df __builtin_ia32_fmaddpd256 (v4df, v4df, v4df)
38097     v8sf __builtin_ia32_fmaddps256 (v8sf, v8sf, v8sf)
38098     v4df __builtin_ia32_fmsubpd256 (v4df, v4df, v4df)
38099     v8sf __builtin_ia32_fmsubps256 (v8sf, v8sf, v8sf)
38100     v4df __builtin_ia32_fnmaddpd256 (v4df, v4df, v4df)
38101     v8sf __builtin_ia32_fnmaddps256 (v8sf, v8sf, v8sf)
38102     v4df __builtin_ia32_fnmsubpd256 (v4df, v4df, v4df)
38103     v8sf __builtin_ia32_fnmsubps256 (v8sf, v8sf, v8sf)
38104     v4df __builtin_ia32_fmaddsubpd256 (v4df, v4df, v4df)
38105     v8sf __builtin_ia32_fmaddsubps256 (v8sf, v8sf, v8sf)
38106     v4df __builtin_ia32_fmsubaddpd256 (v4df, v4df, v4df)
38107     v8sf __builtin_ia32_fmsubaddps256 (v8sf, v8sf, v8sf)
38108
38109 The following built-in functions are available when `-mlwp' is used.
38110
38111     void __builtin_ia32_llwpcb16 (void *);
38112     void __builtin_ia32_llwpcb32 (void *);
38113     void __builtin_ia32_llwpcb64 (void *);
38114     void * __builtin_ia32_llwpcb16 (void);
38115     void * __builtin_ia32_llwpcb32 (void);
38116     void * __builtin_ia32_llwpcb64 (void);
38117     void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short)
38118     void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int)
38119     void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int)
38120     unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short)
38121     unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int)
38122     unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int)
38123
38124 The following built-in functions are available when `-mbmi' is used.
38125All of them generate the machine instruction that is part of the name.
38126     unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int);
38127     unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long);
38128
38129 The following built-in functions are available when `-mbmi2' is used.
38130All of them generate the machine instruction that is part of the name.
38131     unsigned int _bzhi_u32 (unsigned int, unsigned int)
38132     unsigned int _pdep_u32 (unsigned int, unsigned int)
38133     unsigned int _pext_u32 (unsigned int, unsigned int)
38134     unsigned long long _bzhi_u64 (unsigned long long, unsigned long long)
38135     unsigned long long _pdep_u64 (unsigned long long, unsigned long long)
38136     unsigned long long _pext_u64 (unsigned long long, unsigned long long)
38137
38138 The following built-in functions are available when `-mlzcnt' is used.
38139All of them generate the machine instruction that is part of the name.
38140     unsigned short __builtin_ia32_lzcnt_16(unsigned short);
38141     unsigned int __builtin_ia32_lzcnt_u32(unsigned int);
38142     unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long);
38143
38144 The following built-in functions are available when `-mtbm' is used.
38145Both of them generate the immediate form of the bextr machine
38146instruction.
38147     unsigned int __builtin_ia32_bextri_u32 (unsigned int, const unsigned int);
38148     unsigned long long __builtin_ia32_bextri_u64 (unsigned long long, const unsigned long long);
38149
38150 The following built-in functions are available when `-m3dnow' is used.
38151All of them generate the machine instruction that is part of the name.
38152
38153     void __builtin_ia32_femms (void)
38154     v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
38155     v2si __builtin_ia32_pf2id (v2sf)
38156     v2sf __builtin_ia32_pfacc (v2sf, v2sf)
38157     v2sf __builtin_ia32_pfadd (v2sf, v2sf)
38158     v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
38159     v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
38160     v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
38161     v2sf __builtin_ia32_pfmax (v2sf, v2sf)
38162     v2sf __builtin_ia32_pfmin (v2sf, v2sf)
38163     v2sf __builtin_ia32_pfmul (v2sf, v2sf)
38164     v2sf __builtin_ia32_pfrcp (v2sf)
38165     v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
38166     v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
38167     v2sf __builtin_ia32_pfrsqrt (v2sf)
38168     v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf)
38169     v2sf __builtin_ia32_pfsub (v2sf, v2sf)
38170     v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
38171     v2sf __builtin_ia32_pi2fd (v2si)
38172     v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
38173
38174 The following built-in functions are available when both `-m3dnow' and
38175`-march=athlon' are used.  All of them generate the machine instruction
38176that is part of the name.
38177
38178     v2si __builtin_ia32_pf2iw (v2sf)
38179     v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
38180     v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
38181     v2sf __builtin_ia32_pi2fw (v2si)
38182     v2sf __builtin_ia32_pswapdsf (v2sf)
38183     v2si __builtin_ia32_pswapdsi (v2si)
38184
38185 The following built-in functions are available when `-mrtm' is used
38186They are used for restricted transactional memory. These are the
38187internal low level functions. Normally the functions in *note X86
38188transactional memory intrinsics:: should be used instead.
38189
38190     int __builtin_ia32_xbegin ()
38191     void __builtin_ia32_xend ()
38192     void __builtin_ia32_xabort (status)
38193     int __builtin_ia32_xtest ()
38194
38195
38196File: gcc.info,  Node: X86 transactional memory intrinsics,  Next: MIPS DSP Built-in Functions,  Prev: X86 Built-in Functions,  Up: Target Builtins
38197
381986.56.8 X86 transaction memory intrinsics
38199----------------------------------------
38200
38201Hardware transactional memory intrinsics for i386. These allow to use
38202memory transactions with RTM (Restricted Transactional Memory).  For
38203using HLE (Hardware Lock Elision) see *note x86 specific memory model
38204extensions for transactional memory:: instead.  This support is enabled
38205with the `-mrtm' option.
38206
38207 A memory transaction commits all changes to memory in an atomic way,
38208as visible to other threads. If the transaction fails it is rolled back
38209and all side effects discarded.
38210
38211 Generally there is no guarantee that a memory transaction ever suceeds
38212and suitable fallback code always needs to be supplied.
38213
38214 -- RTM Function: unsigned _xbegin ()
38215     Start a RTM (Restricted Transactional Memory) transaction.
38216     Returns _XBEGIN_STARTED when the transaction started successfully
38217     (note this is not 0, so the constant has to be explicitely
38218     tested). When the transaction aborts all side effects are undone
38219     and an abort code is returned. There is no guarantee any
38220     transaction ever succeeds, so there always needs to be a valid
38221     tested fallback path.
38222
38223     #include <immintrin.h>
38224
38225     if ((status = _xbegin ()) == _XBEGIN_STARTED) {
38226         ... transaction code...
38227         _xend ();
38228     } else {
38229         ... non transactional fallback path...
38230     }
38231
38232 Valid abort status bits (when the value is not `_XBEGIN_STARTED') are:
38233
38234`_XABORT_EXPLICIT'
38235     Transaction explicitely aborted with `_xabort'. The parameter
38236     passed to `_xabort' is available with `_XABORT_CODE(status)'
38237
38238`_XABORT_RETRY'
38239     Transaction retry is possible.
38240
38241`_XABORT_CONFLICT'
38242     Transaction abort due to a memory conflict with another thread
38243
38244`_XABORT_CAPACITY'
38245     Transaction abort due to the transaction using too much memory
38246
38247`_XABORT_DEBUG'
38248     Transaction abort due to a debug trap
38249
38250`_XABORT_NESTED'
38251     Transaction abort in a inner nested transaction
38252
38253 -- RTM Function: void _xend ()
38254     Commit the current transaction. When no transaction is active this
38255     will fault. All memory side effects of the transactions will
38256     become visible to other threads in an atomic matter.
38257
38258 -- RTM Function: int _xtest ()
38259     Return a value not zero when a transaction is currently active,
38260     otherwise 0.
38261
38262 -- RTM Function: void _xabort (status)
38263     Abort the current transaction. When no transaction is active this
38264     is a no-op.  status must be a 8bit constant, that is included in
38265     the status code returned by `_xbegin'
38266
38267
38268File: gcc.info,  Node: MIPS DSP Built-in Functions,  Next: MIPS Paired-Single Support,  Prev: X86 transactional memory intrinsics,  Up: Target Builtins
38269
382706.56.9 MIPS DSP Built-in Functions
38271----------------------------------
38272
38273The MIPS DSP Application-Specific Extension (ASE) includes new
38274instructions that are designed to improve the performance of DSP and
38275media applications.  It provides instructions that operate on packed
382768-bit/16-bit integer data, Q7, Q15 and Q31 fractional data.
38277
38278 GCC supports MIPS DSP operations using both the generic vector
38279extensions (*note Vector Extensions::) and a collection of
38280MIPS-specific built-in functions.  Both kinds of support are enabled by
38281the `-mdsp' command-line option.
38282
38283 Revision 2 of the ASE was introduced in the second half of 2006.  This
38284revision adds extra instructions to the original ASE, but is otherwise
38285backwards-compatible with it.  You can select revision 2 using the
38286command-line option `-mdspr2'; this option implies `-mdsp'.
38287
38288 The SCOUNT and POS bits of the DSP control register are global.  The
38289WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and
38290POS bits.  During optimization, the compiler does not delete these
38291instructions and it does not delete calls to functions containing these
38292instructions.
38293
38294 At present, GCC only provides support for operations on 32-bit
38295vectors.  The vector type associated with 8-bit integer data is usually
38296called `v4i8', the vector type associated with Q7 is usually called
38297`v4q7', the vector type associated with 16-bit integer data is usually
38298called `v2i16', and the vector type associated with Q15 is usually
38299called `v2q15'.  They can be defined in C as follows:
38300
38301     typedef signed char v4i8 __attribute__ ((vector_size(4)));
38302     typedef signed char v4q7 __attribute__ ((vector_size(4)));
38303     typedef short v2i16 __attribute__ ((vector_size(4)));
38304     typedef short v2q15 __attribute__ ((vector_size(4)));
38305
38306 `v4i8', `v4q7', `v2i16' and `v2q15' values are initialized in the same
38307way as aggregates.  For example:
38308
38309     v4i8 a = {1, 2, 3, 4};
38310     v4i8 b;
38311     b = (v4i8) {5, 6, 7, 8};
38312
38313     v2q15 c = {0x0fcb, 0x3a75};
38314     v2q15 d;
38315     d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};
38316
38317 _Note:_ The CPU's endianness determines the order in which values are
38318packed.  On little-endian targets, the first value is the least
38319significant and the last value is the most significant.  The opposite
38320order applies to big-endian targets.  For example, the code above sets
38321the lowest byte of `a' to `1' on little-endian targets and `4' on
38322big-endian targets.
38323
38324 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer
38325representation.  As shown in this example, the integer representation
38326of a Q7 value can be obtained by multiplying the fractional value by
38327`0x1.0p7'.  The equivalent for Q15 values is to multiply by `0x1.0p15'.
38328The equivalent for Q31 values is to multiply by `0x1.0p31'.
38329
38330 The table below lists the `v4i8' and `v2q15' operations for which
38331hardware support exists.  `a' and `b' are `v4i8' values, and `c' and
38332`d' are `v2q15' values.
38333
38334C code                               MIPS instruction
38335`a + b'                              `addu.qb'
38336`c + d'                              `addq.ph'
38337`a - b'                              `subu.qb'
38338`c - d'                              `subq.ph'
38339
38340 The table below lists the `v2i16' operation for which hardware support
38341exists for the DSP ASE REV 2.  `e' and `f' are `v2i16' values.
38342
38343C code                               MIPS instruction
38344`e * f'                              `mul.ph'
38345
38346 It is easier to describe the DSP built-in functions if we first define
38347the following types:
38348
38349     typedef int q31;
38350     typedef int i32;
38351     typedef unsigned int ui32;
38352     typedef long long a64;
38353
38354 `q31' and `i32' are actually the same as `int', but we use `q31' to
38355indicate a Q31 fractional value and `i32' to indicate a 32-bit integer
38356value.  Similarly, `a64' is the same as `long long', but we use `a64'
38357to indicate values that are placed in one of the four DSP accumulators
38358(`$ac0', `$ac1', `$ac2' or `$ac3').
38359
38360 Also, some built-in functions prefer or require immediate numbers as
38361parameters, because the corresponding DSP instructions accept both
38362immediate numbers and register operands, or accept immediate numbers
38363only.  The immediate parameters are listed as follows.
38364
38365     imm0_3: 0 to 3.
38366     imm0_7: 0 to 7.
38367     imm0_15: 0 to 15.
38368     imm0_31: 0 to 31.
38369     imm0_63: 0 to 63.
38370     imm0_255: 0 to 255.
38371     imm_n32_31: -32 to 31.
38372     imm_n512_511: -512 to 511.
38373
38374 The following built-in functions map directly to a particular MIPS DSP
38375instruction.  Please refer to the architecture specification for
38376details on what each instruction does.
38377
38378     v2q15 __builtin_mips_addq_ph (v2q15, v2q15)
38379     v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15)
38380     q31 __builtin_mips_addq_s_w (q31, q31)
38381     v4i8 __builtin_mips_addu_qb (v4i8, v4i8)
38382     v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8)
38383     v2q15 __builtin_mips_subq_ph (v2q15, v2q15)
38384     v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15)
38385     q31 __builtin_mips_subq_s_w (q31, q31)
38386     v4i8 __builtin_mips_subu_qb (v4i8, v4i8)
38387     v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8)
38388     i32 __builtin_mips_addsc (i32, i32)
38389     i32 __builtin_mips_addwc (i32, i32)
38390     i32 __builtin_mips_modsub (i32, i32)
38391     i32 __builtin_mips_raddu_w_qb (v4i8)
38392     v2q15 __builtin_mips_absq_s_ph (v2q15)
38393     q31 __builtin_mips_absq_s_w (q31)
38394     v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15)
38395     v2q15 __builtin_mips_precrq_ph_w (q31, q31)
38396     v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31)
38397     v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15)
38398     q31 __builtin_mips_preceq_w_phl (v2q15)
38399     q31 __builtin_mips_preceq_w_phr (v2q15)
38400     v2q15 __builtin_mips_precequ_ph_qbl (v4i8)
38401     v2q15 __builtin_mips_precequ_ph_qbr (v4i8)
38402     v2q15 __builtin_mips_precequ_ph_qbla (v4i8)
38403     v2q15 __builtin_mips_precequ_ph_qbra (v4i8)
38404     v2q15 __builtin_mips_preceu_ph_qbl (v4i8)
38405     v2q15 __builtin_mips_preceu_ph_qbr (v4i8)
38406     v2q15 __builtin_mips_preceu_ph_qbla (v4i8)
38407     v2q15 __builtin_mips_preceu_ph_qbra (v4i8)
38408     v4i8 __builtin_mips_shll_qb (v4i8, imm0_7)
38409     v4i8 __builtin_mips_shll_qb (v4i8, i32)
38410     v2q15 __builtin_mips_shll_ph (v2q15, imm0_15)
38411     v2q15 __builtin_mips_shll_ph (v2q15, i32)
38412     v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15)
38413     v2q15 __builtin_mips_shll_s_ph (v2q15, i32)
38414     q31 __builtin_mips_shll_s_w (q31, imm0_31)
38415     q31 __builtin_mips_shll_s_w (q31, i32)
38416     v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7)
38417     v4i8 __builtin_mips_shrl_qb (v4i8, i32)
38418     v2q15 __builtin_mips_shra_ph (v2q15, imm0_15)
38419     v2q15 __builtin_mips_shra_ph (v2q15, i32)
38420     v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15)
38421     v2q15 __builtin_mips_shra_r_ph (v2q15, i32)
38422     q31 __builtin_mips_shra_r_w (q31, imm0_31)
38423     q31 __builtin_mips_shra_r_w (q31, i32)
38424     v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15)
38425     v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15)
38426     v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15)
38427     q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15)
38428     q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15)
38429     a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8)
38430     a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8)
38431     a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8)
38432     a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8)
38433     a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15)
38434     a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31)
38435     a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15)
38436     a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31)
38437     a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15)
38438     a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15)
38439     a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15)
38440     a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15)
38441     a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15)
38442     i32 __builtin_mips_bitrev (i32)
38443     i32 __builtin_mips_insv (i32, i32)
38444     v4i8 __builtin_mips_repl_qb (imm0_255)
38445     v4i8 __builtin_mips_repl_qb (i32)
38446     v2q15 __builtin_mips_repl_ph (imm_n512_511)
38447     v2q15 __builtin_mips_repl_ph (i32)
38448     void __builtin_mips_cmpu_eq_qb (v4i8, v4i8)
38449     void __builtin_mips_cmpu_lt_qb (v4i8, v4i8)
38450     void __builtin_mips_cmpu_le_qb (v4i8, v4i8)
38451     i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8)
38452     i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8)
38453     i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8)
38454     void __builtin_mips_cmp_eq_ph (v2q15, v2q15)
38455     void __builtin_mips_cmp_lt_ph (v2q15, v2q15)
38456     void __builtin_mips_cmp_le_ph (v2q15, v2q15)
38457     v4i8 __builtin_mips_pick_qb (v4i8, v4i8)
38458     v2q15 __builtin_mips_pick_ph (v2q15, v2q15)
38459     v2q15 __builtin_mips_packrl_ph (v2q15, v2q15)
38460     i32 __builtin_mips_extr_w (a64, imm0_31)
38461     i32 __builtin_mips_extr_w (a64, i32)
38462     i32 __builtin_mips_extr_r_w (a64, imm0_31)
38463     i32 __builtin_mips_extr_s_h (a64, i32)
38464     i32 __builtin_mips_extr_rs_w (a64, imm0_31)
38465     i32 __builtin_mips_extr_rs_w (a64, i32)
38466     i32 __builtin_mips_extr_s_h (a64, imm0_31)
38467     i32 __builtin_mips_extr_r_w (a64, i32)
38468     i32 __builtin_mips_extp (a64, imm0_31)
38469     i32 __builtin_mips_extp (a64, i32)
38470     i32 __builtin_mips_extpdp (a64, imm0_31)
38471     i32 __builtin_mips_extpdp (a64, i32)
38472     a64 __builtin_mips_shilo (a64, imm_n32_31)
38473     a64 __builtin_mips_shilo (a64, i32)
38474     a64 __builtin_mips_mthlip (a64, i32)
38475     void __builtin_mips_wrdsp (i32, imm0_63)
38476     i32 __builtin_mips_rddsp (imm0_63)
38477     i32 __builtin_mips_lbux (void *, i32)
38478     i32 __builtin_mips_lhx (void *, i32)
38479     i32 __builtin_mips_lwx (void *, i32)
38480     a64 __builtin_mips_ldx (void *, i32) [MIPS64 only]
38481     i32 __builtin_mips_bposge32 (void)
38482     a64 __builtin_mips_madd (a64, i32, i32);
38483     a64 __builtin_mips_maddu (a64, ui32, ui32);
38484     a64 __builtin_mips_msub (a64, i32, i32);
38485     a64 __builtin_mips_msubu (a64, ui32, ui32);
38486     a64 __builtin_mips_mult (i32, i32);
38487     a64 __builtin_mips_multu (ui32, ui32);
38488
38489 The following built-in functions map directly to a particular MIPS DSP
38490REV 2 instruction.  Please refer to the architecture specification for
38491details on what each instruction does.
38492
38493     v4q7 __builtin_mips_absq_s_qb (v4q7);
38494     v2i16 __builtin_mips_addu_ph (v2i16, v2i16);
38495     v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16);
38496     v4i8 __builtin_mips_adduh_qb (v4i8, v4i8);
38497     v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8);
38498     i32 __builtin_mips_append (i32, i32, imm0_31);
38499     i32 __builtin_mips_balign (i32, i32, imm0_3);
38500     i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8);
38501     i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8);
38502     i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8);
38503     a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16);
38504     a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16);
38505     v2i16 __builtin_mips_mul_ph (v2i16, v2i16);
38506     v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16);
38507     q31 __builtin_mips_mulq_rs_w (q31, q31);
38508     v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15);
38509     q31 __builtin_mips_mulq_s_w (q31, q31);
38510     a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16);
38511     v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16);
38512     v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31);
38513     v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31);
38514     i32 __builtin_mips_prepend (i32, i32, imm0_31);
38515     v4i8 __builtin_mips_shra_qb (v4i8, imm0_7);
38516     v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7);
38517     v4i8 __builtin_mips_shra_qb (v4i8, i32);
38518     v4i8 __builtin_mips_shra_r_qb (v4i8, i32);
38519     v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15);
38520     v2i16 __builtin_mips_shrl_ph (v2i16, i32);
38521     v2i16 __builtin_mips_subu_ph (v2i16, v2i16);
38522     v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16);
38523     v4i8 __builtin_mips_subuh_qb (v4i8, v4i8);
38524     v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8);
38525     v2q15 __builtin_mips_addqh_ph (v2q15, v2q15);
38526     v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15);
38527     q31 __builtin_mips_addqh_w (q31, q31);
38528     q31 __builtin_mips_addqh_r_w (q31, q31);
38529     v2q15 __builtin_mips_subqh_ph (v2q15, v2q15);
38530     v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15);
38531     q31 __builtin_mips_subqh_w (q31, q31);
38532     q31 __builtin_mips_subqh_r_w (q31, q31);
38533     a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16);
38534     a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16);
38535     a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15);
38536     a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15);
38537     a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15);
38538     a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15);
38539
38540
38541File: gcc.info,  Node: MIPS Paired-Single Support,  Next: MIPS Loongson Built-in Functions,  Prev: MIPS DSP Built-in Functions,  Up: Target Builtins
38542
385436.56.10 MIPS Paired-Single Support
38544----------------------------------
38545
38546The MIPS64 architecture includes a number of instructions that operate
38547on pairs of single-precision floating-point values.  Each pair is
38548packed into a 64-bit floating-point register, with one element being
38549designated the "upper half" and the other being designated the "lower
38550half".
38551
38552 GCC supports paired-single operations using both the generic vector
38553extensions (*note Vector Extensions::) and a collection of
38554MIPS-specific built-in functions.  Both kinds of support are enabled by
38555the `-mpaired-single' command-line option.
38556
38557 The vector type associated with paired-single values is usually called
38558`v2sf'.  It can be defined in C as follows:
38559
38560     typedef float v2sf __attribute__ ((vector_size (8)));
38561
38562 `v2sf' values are initialized in the same way as aggregates.  For
38563example:
38564
38565     v2sf a = {1.5, 9.1};
38566     v2sf b;
38567     float e, f;
38568     b = (v2sf) {e, f};
38569
38570 _Note:_ The CPU's endianness determines which value is stored in the
38571upper half of a register and which value is stored in the lower half.
38572On little-endian targets, the first value is the lower one and the
38573second value is the upper one.  The opposite order applies to
38574big-endian targets.  For example, the code above sets the lower half of
38575`a' to `1.5' on little-endian targets and `9.1' on big-endian targets.
38576
38577
38578File: gcc.info,  Node: MIPS Loongson Built-in Functions,  Next: Other MIPS Built-in Functions,  Prev: MIPS Paired-Single Support,  Up: Target Builtins
38579
385806.56.11 MIPS Loongson Built-in Functions
38581----------------------------------------
38582
38583GCC provides intrinsics to access the SIMD instructions provided by the
38584ST Microelectronics Loongson-2E and -2F processors.  These intrinsics,
38585available after inclusion of the `loongson.h' header file, operate on
38586the following 64-bit vector types:
38587
38588   * `uint8x8_t', a vector of eight unsigned 8-bit integers;
38589
38590   * `uint16x4_t', a vector of four unsigned 16-bit integers;
38591
38592   * `uint32x2_t', a vector of two unsigned 32-bit integers;
38593
38594   * `int8x8_t', a vector of eight signed 8-bit integers;
38595
38596   * `int16x4_t', a vector of four signed 16-bit integers;
38597
38598   * `int32x2_t', a vector of two signed 32-bit integers.
38599
38600 The intrinsics provided are listed below; each is named after the
38601machine instruction to which it corresponds, with suffixes added as
38602appropriate to distinguish intrinsics that expand to the same machine
38603instruction yet have different argument types.  Refer to the
38604architecture documentation for a description of the functionality of
38605each instruction.
38606
38607     int16x4_t packsswh (int32x2_t s, int32x2_t t);
38608     int8x8_t packsshb (int16x4_t s, int16x4_t t);
38609     uint8x8_t packushb (uint16x4_t s, uint16x4_t t);
38610     uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t);
38611     uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t);
38612     uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t);
38613     int32x2_t paddw_s (int32x2_t s, int32x2_t t);
38614     int16x4_t paddh_s (int16x4_t s, int16x4_t t);
38615     int8x8_t paddb_s (int8x8_t s, int8x8_t t);
38616     uint64_t paddd_u (uint64_t s, uint64_t t);
38617     int64_t paddd_s (int64_t s, int64_t t);
38618     int16x4_t paddsh (int16x4_t s, int16x4_t t);
38619     int8x8_t paddsb (int8x8_t s, int8x8_t t);
38620     uint16x4_t paddush (uint16x4_t s, uint16x4_t t);
38621     uint8x8_t paddusb (uint8x8_t s, uint8x8_t t);
38622     uint64_t pandn_ud (uint64_t s, uint64_t t);
38623     uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t);
38624     uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t);
38625     uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t);
38626     int64_t pandn_sd (int64_t s, int64_t t);
38627     int32x2_t pandn_sw (int32x2_t s, int32x2_t t);
38628     int16x4_t pandn_sh (int16x4_t s, int16x4_t t);
38629     int8x8_t pandn_sb (int8x8_t s, int8x8_t t);
38630     uint16x4_t pavgh (uint16x4_t s, uint16x4_t t);
38631     uint8x8_t pavgb (uint8x8_t s, uint8x8_t t);
38632     uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t);
38633     uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t);
38634     uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t);
38635     int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t);
38636     int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t);
38637     int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t);
38638     uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t);
38639     uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t);
38640     uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t);
38641     int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t);
38642     int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t);
38643     int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t);
38644     uint16x4_t pextrh_u (uint16x4_t s, int field);
38645     int16x4_t pextrh_s (int16x4_t s, int field);
38646     uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t);
38647     uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t);
38648     uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t);
38649     uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t);
38650     int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t);
38651     int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t);
38652     int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t);
38653     int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t);
38654     int32x2_t pmaddhw (int16x4_t s, int16x4_t t);
38655     int16x4_t pmaxsh (int16x4_t s, int16x4_t t);
38656     uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t);
38657     int16x4_t pminsh (int16x4_t s, int16x4_t t);
38658     uint8x8_t pminub (uint8x8_t s, uint8x8_t t);
38659     uint8x8_t pmovmskb_u (uint8x8_t s);
38660     int8x8_t pmovmskb_s (int8x8_t s);
38661     uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t);
38662     int16x4_t pmulhh (int16x4_t s, int16x4_t t);
38663     int16x4_t pmullh (int16x4_t s, int16x4_t t);
38664     int64_t pmuluw (uint32x2_t s, uint32x2_t t);
38665     uint8x8_t pasubub (uint8x8_t s, uint8x8_t t);
38666     uint16x4_t biadd (uint8x8_t s);
38667     uint16x4_t psadbh (uint8x8_t s, uint8x8_t t);
38668     uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order);
38669     int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order);
38670     uint16x4_t psllh_u (uint16x4_t s, uint8_t amount);
38671     int16x4_t psllh_s (int16x4_t s, uint8_t amount);
38672     uint32x2_t psllw_u (uint32x2_t s, uint8_t amount);
38673     int32x2_t psllw_s (int32x2_t s, uint8_t amount);
38674     uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount);
38675     int16x4_t psrlh_s (int16x4_t s, uint8_t amount);
38676     uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount);
38677     int32x2_t psrlw_s (int32x2_t s, uint8_t amount);
38678     uint16x4_t psrah_u (uint16x4_t s, uint8_t amount);
38679     int16x4_t psrah_s (int16x4_t s, uint8_t amount);
38680     uint32x2_t psraw_u (uint32x2_t s, uint8_t amount);
38681     int32x2_t psraw_s (int32x2_t s, uint8_t amount);
38682     uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t);
38683     uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t);
38684     uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t);
38685     int32x2_t psubw_s (int32x2_t s, int32x2_t t);
38686     int16x4_t psubh_s (int16x4_t s, int16x4_t t);
38687     int8x8_t psubb_s (int8x8_t s, int8x8_t t);
38688     uint64_t psubd_u (uint64_t s, uint64_t t);
38689     int64_t psubd_s (int64_t s, int64_t t);
38690     int16x4_t psubsh (int16x4_t s, int16x4_t t);
38691     int8x8_t psubsb (int8x8_t s, int8x8_t t);
38692     uint16x4_t psubush (uint16x4_t s, uint16x4_t t);
38693     uint8x8_t psubusb (uint8x8_t s, uint8x8_t t);
38694     uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t);
38695     uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t);
38696     uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t);
38697     int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t);
38698     int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t);
38699     int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t);
38700     uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t);
38701     uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t);
38702     uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t);
38703     int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t);
38704     int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t);
38705     int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t);
38706
38707* Menu:
38708
38709* Paired-Single Arithmetic::
38710* Paired-Single Built-in Functions::
38711* MIPS-3D Built-in Functions::
38712
38713
38714File: gcc.info,  Node: Paired-Single Arithmetic,  Next: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
38715
387166.56.11.1 Paired-Single Arithmetic
38717..................................
38718
38719The table below lists the `v2sf' operations for which hardware support
38720exists.  `a', `b' and `c' are `v2sf' values and `x' is an integral
38721value.
38722
38723C code                               MIPS instruction
38724`a + b'                              `add.ps'
38725`a - b'                              `sub.ps'
38726`-a'                                 `neg.ps'
38727`a * b'                              `mul.ps'
38728`a * b + c'                          `madd.ps'
38729`a * b - c'                          `msub.ps'
38730`-(a * b + c)'                       `nmadd.ps'
38731`-(a * b - c)'                       `nmsub.ps'
38732`x ? a : b'                          `movn.ps'/`movz.ps'
38733
38734 Note that the multiply-accumulate instructions can be disabled using
38735the command-line option `-mno-fused-madd'.
38736
38737
38738File: gcc.info,  Node: Paired-Single Built-in Functions,  Next: MIPS-3D Built-in Functions,  Prev: Paired-Single Arithmetic,  Up: MIPS Loongson Built-in Functions
38739
387406.56.11.2 Paired-Single Built-in Functions
38741..........................................
38742
38743The following paired-single functions map directly to a particular MIPS
38744instruction.  Please refer to the architecture specification for
38745details on what each instruction does.
38746
38747`v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
38748     Pair lower lower (`pll.ps').
38749
38750`v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
38751     Pair upper lower (`pul.ps').
38752
38753`v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
38754     Pair lower upper (`plu.ps').
38755
38756`v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
38757     Pair upper upper (`puu.ps').
38758
38759`v2sf __builtin_mips_cvt_ps_s (float, float)'
38760     Convert pair to paired single (`cvt.ps.s').
38761
38762`float __builtin_mips_cvt_s_pl (v2sf)'
38763     Convert pair lower to single (`cvt.s.pl').
38764
38765`float __builtin_mips_cvt_s_pu (v2sf)'
38766     Convert pair upper to single (`cvt.s.pu').
38767
38768`v2sf __builtin_mips_abs_ps (v2sf)'
38769     Absolute value (`abs.ps').
38770
38771`v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
38772     Align variable (`alnv.ps').
38773
38774     _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
38775     otherwise the result is unpredictable.  Please read the
38776     instruction description for details.
38777
38778 The following multi-instruction functions are also available.  In each
38779case, COND can be any of the 16 floating-point conditions: `f', `un',
38780`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
38781`lt', `nge', `le' or `ngt'.
38782
38783`v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
38784`v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
38785     Conditional move based on floating-point comparison (`c.COND.ps',
38786     `movt.ps'/`movf.ps').
38787
38788     The `movt' functions return the value X computed by:
38789
38790          c.COND.ps CC,A,B
38791          mov.ps X,C
38792          movt.ps X,D,CC
38793
38794     The `movf' functions are similar but use `movf.ps' instead of
38795     `movt.ps'.
38796
38797`int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
38798`int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
38799     Comparison of two paired-single values (`c.COND.ps',
38800     `bc1t'/`bc1f').
38801
38802     These functions compare A and B using `c.COND.ps' and return
38803     either the upper or lower half of the result.  For example:
38804
38805          v2sf a, b;
38806          if (__builtin_mips_upper_c_eq_ps (a, b))
38807            upper_halves_are_equal ();
38808          else
38809            upper_halves_are_unequal ();
38810
38811          if (__builtin_mips_lower_c_eq_ps (a, b))
38812            lower_halves_are_equal ();
38813          else
38814            lower_halves_are_unequal ();
38815
38816
38817File: gcc.info,  Node: MIPS-3D Built-in Functions,  Prev: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
38818
388196.56.11.3 MIPS-3D Built-in Functions
38820....................................
38821
38822The MIPS-3D Application-Specific Extension (ASE) includes additional
38823paired-single instructions that are designed to improve the performance
38824of 3D graphics operations.  Support for these instructions is controlled
38825by the `-mips3d' command-line option.
38826
38827 The functions listed below map directly to a particular MIPS-3D
38828instruction.  Please refer to the architecture specification for more
38829details on what each instruction does.
38830
38831`v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
38832     Reduction add (`addr.ps').
38833
38834`v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
38835     Reduction multiply (`mulr.ps').
38836
38837`v2sf __builtin_mips_cvt_pw_ps (v2sf)'
38838     Convert paired single to paired word (`cvt.pw.ps').
38839
38840`v2sf __builtin_mips_cvt_ps_pw (v2sf)'
38841     Convert paired word to paired single (`cvt.ps.pw').
38842
38843`float __builtin_mips_recip1_s (float)'
38844`double __builtin_mips_recip1_d (double)'
38845`v2sf __builtin_mips_recip1_ps (v2sf)'
38846     Reduced-precision reciprocal (sequence step 1) (`recip1.FMT').
38847
38848`float __builtin_mips_recip2_s (float, float)'
38849`double __builtin_mips_recip2_d (double, double)'
38850`v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
38851     Reduced-precision reciprocal (sequence step 2) (`recip2.FMT').
38852
38853`float __builtin_mips_rsqrt1_s (float)'
38854`double __builtin_mips_rsqrt1_d (double)'
38855`v2sf __builtin_mips_rsqrt1_ps (v2sf)'
38856     Reduced-precision reciprocal square root (sequence step 1)
38857     (`rsqrt1.FMT').
38858
38859`float __builtin_mips_rsqrt2_s (float, float)'
38860`double __builtin_mips_rsqrt2_d (double, double)'
38861`v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
38862     Reduced-precision reciprocal square root (sequence step 2)
38863     (`rsqrt2.FMT').
38864
38865 The following multi-instruction functions are also available.  In each
38866case, COND can be any of the 16 floating-point conditions: `f', `un',
38867`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
38868`lt', `nge', `le' or `ngt'.
38869
38870`int __builtin_mips_cabs_COND_s (float A, float B)'
38871`int __builtin_mips_cabs_COND_d (double A, double B)'
38872     Absolute comparison of two scalar values (`cabs.COND.FMT',
38873     `bc1t'/`bc1f').
38874
38875     These functions compare A and B using `cabs.COND.s' or
38876     `cabs.COND.d' and return the result as a boolean value.  For
38877     example:
38878
38879          float a, b;
38880          if (__builtin_mips_cabs_eq_s (a, b))
38881            true ();
38882          else
38883            false ();
38884
38885`int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
38886`int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
38887     Absolute comparison of two paired-single values (`cabs.COND.ps',
38888     `bc1t'/`bc1f').
38889
38890     These functions compare A and B using `cabs.COND.ps' and return
38891     either the upper or lower half of the result.  For example:
38892
38893          v2sf a, b;
38894          if (__builtin_mips_upper_cabs_eq_ps (a, b))
38895            upper_halves_are_equal ();
38896          else
38897            upper_halves_are_unequal ();
38898
38899          if (__builtin_mips_lower_cabs_eq_ps (a, b))
38900            lower_halves_are_equal ();
38901          else
38902            lower_halves_are_unequal ();
38903
38904`v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
38905`v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
38906     Conditional move based on absolute comparison (`cabs.COND.ps',
38907     `movt.ps'/`movf.ps').
38908
38909     The `movt' functions return the value X computed by:
38910
38911          cabs.COND.ps CC,A,B
38912          mov.ps X,C
38913          movt.ps X,D,CC
38914
38915     The `movf' functions are similar but use `movf.ps' instead of
38916     `movt.ps'.
38917
38918`int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
38919`int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
38920`int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
38921`int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
38922     Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps',
38923     `bc1any2t'/`bc1any2f').
38924
38925     These functions compare A and B using `c.COND.ps' or
38926     `cabs.COND.ps'.  The `any' forms return true if either result is
38927     true and the `all' forms return true if both results are true.
38928     For example:
38929
38930          v2sf a, b;
38931          if (__builtin_mips_any_c_eq_ps (a, b))
38932            one_is_true ();
38933          else
38934            both_are_false ();
38935
38936          if (__builtin_mips_all_c_eq_ps (a, b))
38937            both_are_true ();
38938          else
38939            one_is_false ();
38940
38941`int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
38942`int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
38943`int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
38944`int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
38945     Comparison of four paired-single values
38946     (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f').
38947
38948     These functions use `c.COND.ps' or `cabs.COND.ps' to compare A
38949     with B and to compare C with D.  The `any' forms return true if
38950     any of the four results are true and the `all' forms return true
38951     if all four results are true.  For example:
38952
38953          v2sf a, b, c, d;
38954          if (__builtin_mips_any_c_eq_4s (a, b, c, d))
38955            some_are_true ();
38956          else
38957            all_are_false ();
38958
38959          if (__builtin_mips_all_c_eq_4s (a, b, c, d))
38960            all_are_true ();
38961          else
38962            some_are_false ();
38963
38964
38965File: gcc.info,  Node: Other MIPS Built-in Functions,  Next: picoChip Built-in Functions,  Prev: MIPS Loongson Built-in Functions,  Up: Target Builtins
38966
389676.56.12 Other MIPS Built-in Functions
38968-------------------------------------
38969
38970GCC provides other MIPS-specific built-in functions:
38971
38972`void __builtin_mips_cache (int OP, const volatile void *ADDR)'
38973     Insert a `cache' instruction with operands OP and ADDR.  GCC
38974     defines the preprocessor macro `___GCC_HAVE_BUILTIN_MIPS_CACHE'
38975     when this function is available.
38976
38977
38978File: gcc.info,  Node: picoChip Built-in Functions,  Next: PowerPC Built-in Functions,  Prev: Other MIPS Built-in Functions,  Up: Target Builtins
38979
389806.56.13 picoChip Built-in Functions
38981-----------------------------------
38982
38983GCC provides an interface to selected machine instructions from the
38984picoChip instruction set.
38985
38986`int __builtin_sbc (int VALUE)'
38987     Sign bit count.  Return the number of consecutive bits in VALUE
38988     that have the same value as the sign bit.  The result is the
38989     number of leading sign bits minus one, giving the number of
38990     redundant sign bits in VALUE.
38991
38992`int __builtin_byteswap (int VALUE)'
38993     Byte swap.  Return the result of swapping the upper and lower
38994     bytes of VALUE.
38995
38996`int __builtin_brev (int VALUE)'
38997     Bit reversal.  Return the result of reversing the bits in VALUE.
38998     Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so
38999     on.
39000
39001`int __builtin_adds (int X, int Y)'
39002     Saturating addition.  Return the result of adding X and Y, storing
39003     the value 32767 if the result overflows.
39004
39005`int __builtin_subs (int X, int Y)'
39006     Saturating subtraction.  Return the result of subtracting Y from
39007     X, storing the value -32768 if the result overflows.
39008
39009`void __builtin_halt (void)'
39010     Halt.  The processor stops execution.  This built-in is useful for
39011     implementing assertions.
39012
39013
39014
39015File: gcc.info,  Node: PowerPC Built-in Functions,  Next: PowerPC AltiVec/VSX Built-in Functions,  Prev: picoChip Built-in Functions,  Up: Target Builtins
39016
390176.56.14 PowerPC Built-in Functions
39018----------------------------------
39019
39020These built-in functions are available for the PowerPC family of
39021processors:
39022     float __builtin_recipdivf (float, float);
39023     float __builtin_rsqrtf (float);
39024     double __builtin_recipdiv (double, double);
39025     double __builtin_rsqrt (double);
39026     uint64_t __builtin_ppc_get_timebase ();
39027     unsigned long __builtin_ppc_mftb ();
39028     double __builtin_unpack_longdouble (long double, int);
39029     long double __builtin_pack_longdouble (double, double);
39030
39031 The `vec_rsqrt', `__builtin_rsqrt', and `__builtin_rsqrtf' functions
39032generate multiple instructions to implement the reciprocal sqrt
39033functionality using reciprocal sqrt estimate instructions.
39034
39035 The `__builtin_recipdiv', and `__builtin_recipdivf' functions generate
39036multiple instructions to implement division using the reciprocal
39037estimate instructions.
39038
39039 The `__builtin_ppc_get_timebase' and `__builtin_ppc_mftb' functions
39040generate instructions to read the Time Base Register.  The
39041`__builtin_ppc_get_timebase' function may generate multiple
39042instructions and always returns the 64 bits of the Time Base Register.
39043The `__builtin_ppc_mftb' function always generates one instruction and
39044returns the Time Base Register value as an unsigned long, throwing away
39045the most significant word on 32-bit environments.
39046
39047 The following built-in functions are available for the PowerPC family
39048of processors, starting with ISA 2.06 or later (`-mcpu=power7' or
39049`-mpopcntd'):
39050     long __builtin_bpermd (long, long);
39051     int __builtin_divwe (int, int);
39052     int __builtin_divweo (int, int);
39053     unsigned int __builtin_divweu (unsigned int, unsigned int);
39054     unsigned int __builtin_divweuo (unsigned int, unsigned int);
39055     long __builtin_divde (long, long);
39056     long __builtin_divdeo (long, long);
39057     unsigned long __builtin_divdeu (unsigned long, unsigned long);
39058     unsigned long __builtin_divdeuo (unsigned long, unsigned long);
39059     unsigned int cdtbcd (unsigned int);
39060     unsigned int cbcdtd (unsigned int);
39061     unsigned int addg6s (unsigned int, unsigned int);
39062
39063 The `__builtin_divde', `__builtin_divdeo', `__builitin_divdeu',
39064`__builtin_divdeou' functions require a 64-bit environment support ISA
390652.06 or later.
39066
39067 The following built-in functions are available for the PowerPC family
39068of processors when hardware decimal floating point (`-mhard-dfp') is
39069available:
39070     _Decimal64 __builtin_dxex (_Decimal64);
39071     _Decimal128 __builtin_dxexq (_Decimal128);
39072     _Decimal64 __builtin_ddedpd (int, _Decimal64);
39073     _Decimal128 __builtin_ddedpdq (int, _Decimal128);
39074     _Decimal64 __builtin_denbcd (int, _Decimal64);
39075     _Decimal128 __builtin_denbcdq (int, _Decimal128);
39076     _Decimal64 __builtin_diex (_Decimal64, _Decimal64);
39077     _Decimal128 _builtin_diexq (_Decimal128, _Decimal128);
39078     _Decimal64 __builtin_dscli (_Decimal64, int);
39079     _Decimal128 __builitn_dscliq (_Decimal128, int);
39080     _Decimal64 __builtin_dscri (_Decimal64, int);
39081     _Decimal128 __builitn_dscriq (_Decimal128, int);
39082     unsigned long long __builtin_unpack_dec128 (_Decimal128, int);
39083     _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
39084
39085 The following built-in functions are available for the PowerPC family
39086of processors when the Vector Scalar (vsx) instruction set is available:
39087     unsigned long long __builtin_unpack_vector_int128 (vector __int128_t, int);
39088     vector __int128_t __builtin_pack_vector_int128 (unsigned long long,
39089                                                     unsigned long long);
39090
39091
39092File: gcc.info,  Node: PowerPC AltiVec/VSX Built-in Functions,  Next: PowerPC Hardware Transactional Memory Built-in Functions,  Prev: PowerPC Built-in Functions,  Up: Target Builtins
39093
390946.56.15 PowerPC AltiVec Built-in Functions
39095------------------------------------------
39096
39097GCC provides an interface for the PowerPC family of processors to access
39098the AltiVec operations described in Motorola's AltiVec Programming
39099Interface Manual.  The interface is made available by including
39100`<altivec.h>' and using `-maltivec' and `-mabi=altivec'.  The interface
39101supports the following vector types.
39102
39103     vector unsigned char
39104     vector signed char
39105     vector bool char
39106
39107     vector unsigned short
39108     vector signed short
39109     vector bool short
39110     vector pixel
39111
39112     vector unsigned int
39113     vector signed int
39114     vector bool int
39115     vector float
39116
39117 If `-mvsx' is used the following additional vector types are
39118implemented.
39119
39120     vector unsigned long
39121     vector signed long
39122     vector double
39123
39124 The long types are only implemented for 64-bit code generation, and
39125the long type is only used in the floating point/integer conversion
39126instructions.
39127
39128 GCC's implementation of the high-level language interface available
39129from C and C++ code differs from Motorola's documentation in several
39130ways.
39131
39132   * A vector constant is a list of constant expressions within curly
39133     braces.
39134
39135   * A vector initializer requires no cast if the vector constant is of
39136     the same type as the variable it is initializing.
39137
39138   * If `signed' or `unsigned' is omitted, the signedness of the vector
39139     type is the default signedness of the base type.  The default
39140     varies depending on the operating system, so a portable program
39141     should always specify the signedness.
39142
39143   * Compiling with `-maltivec' adds keywords `__vector', `vector',
39144     `__pixel', `pixel', `__bool' and `bool'.  When compiling ISO C,
39145     the context-sensitive substitution of the keywords `vector',
39146     `pixel' and `bool' is disabled.  To use them, you must include
39147     `<altivec.h>' instead.
39148
39149   * GCC allows using a `typedef' name as the type specifier for a
39150     vector type.
39151
39152   * For C, overloaded functions are implemented with macros so the
39153     following does not work:
39154
39155            vec_add ((vector signed int){1, 2, 3, 4}, foo);
39156
39157     Since `vec_add' is a macro, the vector constant in the example is
39158     treated as four separate arguments.  Wrap the entire argument in
39159     parentheses for this to work.
39160
39161 _Note:_ Only the `<altivec.h>' interface is supported.  Internally,
39162GCC uses built-in functions to achieve the functionality in the
39163aforementioned header file, but they are not supported and are subject
39164to change without notice.
39165
39166 The following interfaces are supported for the generic and specific
39167AltiVec operations and the AltiVec predicates.  In cases where there is
39168a direct mapping between generic and specific operations, only the
39169generic names are shown here, although the specific operations can also
39170be used.
39171
39172 Arguments that are documented as `const int' require literal integral
39173values within the range required for that operation.
39174
39175     vector signed char vec_abs (vector signed char);
39176     vector signed short vec_abs (vector signed short);
39177     vector signed int vec_abs (vector signed int);
39178     vector float vec_abs (vector float);
39179
39180     vector signed char vec_abss (vector signed char);
39181     vector signed short vec_abss (vector signed short);
39182     vector signed int vec_abss (vector signed int);
39183
39184     vector signed char vec_add (vector bool char, vector signed char);
39185     vector signed char vec_add (vector signed char, vector bool char);
39186     vector signed char vec_add (vector signed char, vector signed char);
39187     vector unsigned char vec_add (vector bool char, vector unsigned char);
39188     vector unsigned char vec_add (vector unsigned char, vector bool char);
39189     vector unsigned char vec_add (vector unsigned char,
39190                                   vector unsigned char);
39191     vector signed short vec_add (vector bool short, vector signed short);
39192     vector signed short vec_add (vector signed short, vector bool short);
39193     vector signed short vec_add (vector signed short, vector signed short);
39194     vector unsigned short vec_add (vector bool short,
39195                                    vector unsigned short);
39196     vector unsigned short vec_add (vector unsigned short,
39197                                    vector bool short);
39198     vector unsigned short vec_add (vector unsigned short,
39199                                    vector unsigned short);
39200     vector signed int vec_add (vector bool int, vector signed int);
39201     vector signed int vec_add (vector signed int, vector bool int);
39202     vector signed int vec_add (vector signed int, vector signed int);
39203     vector unsigned int vec_add (vector bool int, vector unsigned int);
39204     vector unsigned int vec_add (vector unsigned int, vector bool int);
39205     vector unsigned int vec_add (vector unsigned int, vector unsigned int);
39206     vector float vec_add (vector float, vector float);
39207
39208     vector float vec_vaddfp (vector float, vector float);
39209
39210     vector signed int vec_vadduwm (vector bool int, vector signed int);
39211     vector signed int vec_vadduwm (vector signed int, vector bool int);
39212     vector signed int vec_vadduwm (vector signed int, vector signed int);
39213     vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
39214     vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
39215     vector unsigned int vec_vadduwm (vector unsigned int,
39216                                      vector unsigned int);
39217
39218     vector signed short vec_vadduhm (vector bool short,
39219                                      vector signed short);
39220     vector signed short vec_vadduhm (vector signed short,
39221                                      vector bool short);
39222     vector signed short vec_vadduhm (vector signed short,
39223                                      vector signed short);
39224     vector unsigned short vec_vadduhm (vector bool short,
39225                                        vector unsigned short);
39226     vector unsigned short vec_vadduhm (vector unsigned short,
39227                                        vector bool short);
39228     vector unsigned short vec_vadduhm (vector unsigned short,
39229                                        vector unsigned short);
39230
39231     vector signed char vec_vaddubm (vector bool char, vector signed char);
39232     vector signed char vec_vaddubm (vector signed char, vector bool char);
39233     vector signed char vec_vaddubm (vector signed char, vector signed char);
39234     vector unsigned char vec_vaddubm (vector bool char,
39235                                       vector unsigned char);
39236     vector unsigned char vec_vaddubm (vector unsigned char,
39237                                       vector bool char);
39238     vector unsigned char vec_vaddubm (vector unsigned char,
39239                                       vector unsigned char);
39240
39241     vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
39242
39243     vector unsigned char vec_adds (vector bool char, vector unsigned char);
39244     vector unsigned char vec_adds (vector unsigned char, vector bool char);
39245     vector unsigned char vec_adds (vector unsigned char,
39246                                    vector unsigned char);
39247     vector signed char vec_adds (vector bool char, vector signed char);
39248     vector signed char vec_adds (vector signed char, vector bool char);
39249     vector signed char vec_adds (vector signed char, vector signed char);
39250     vector unsigned short vec_adds (vector bool short,
39251                                     vector unsigned short);
39252     vector unsigned short vec_adds (vector unsigned short,
39253                                     vector bool short);
39254     vector unsigned short vec_adds (vector unsigned short,
39255                                     vector unsigned short);
39256     vector signed short vec_adds (vector bool short, vector signed short);
39257     vector signed short vec_adds (vector signed short, vector bool short);
39258     vector signed short vec_adds (vector signed short, vector signed short);
39259     vector unsigned int vec_adds (vector bool int, vector unsigned int);
39260     vector unsigned int vec_adds (vector unsigned int, vector bool int);
39261     vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
39262     vector signed int vec_adds (vector bool int, vector signed int);
39263     vector signed int vec_adds (vector signed int, vector bool int);
39264     vector signed int vec_adds (vector signed int, vector signed int);
39265
39266     vector signed int vec_vaddsws (vector bool int, vector signed int);
39267     vector signed int vec_vaddsws (vector signed int, vector bool int);
39268     vector signed int vec_vaddsws (vector signed int, vector signed int);
39269
39270     vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
39271     vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
39272     vector unsigned int vec_vadduws (vector unsigned int,
39273                                      vector unsigned int);
39274
39275     vector signed short vec_vaddshs (vector bool short,
39276                                      vector signed short);
39277     vector signed short vec_vaddshs (vector signed short,
39278                                      vector bool short);
39279     vector signed short vec_vaddshs (vector signed short,
39280                                      vector signed short);
39281
39282     vector unsigned short vec_vadduhs (vector bool short,
39283                                        vector unsigned short);
39284     vector unsigned short vec_vadduhs (vector unsigned short,
39285                                        vector bool short);
39286     vector unsigned short vec_vadduhs (vector unsigned short,
39287                                        vector unsigned short);
39288
39289     vector signed char vec_vaddsbs (vector bool char, vector signed char);
39290     vector signed char vec_vaddsbs (vector signed char, vector bool char);
39291     vector signed char vec_vaddsbs (vector signed char, vector signed char);
39292
39293     vector unsigned char vec_vaddubs (vector bool char,
39294                                       vector unsigned char);
39295     vector unsigned char vec_vaddubs (vector unsigned char,
39296                                       vector bool char);
39297     vector unsigned char vec_vaddubs (vector unsigned char,
39298                                       vector unsigned char);
39299
39300     vector float vec_and (vector float, vector float);
39301     vector float vec_and (vector float, vector bool int);
39302     vector float vec_and (vector bool int, vector float);
39303     vector bool int vec_and (vector bool int, vector bool int);
39304     vector signed int vec_and (vector bool int, vector signed int);
39305     vector signed int vec_and (vector signed int, vector bool int);
39306     vector signed int vec_and (vector signed int, vector signed int);
39307     vector unsigned int vec_and (vector bool int, vector unsigned int);
39308     vector unsigned int vec_and (vector unsigned int, vector bool int);
39309     vector unsigned int vec_and (vector unsigned int, vector unsigned int);
39310     vector bool short vec_and (vector bool short, vector bool short);
39311     vector signed short vec_and (vector bool short, vector signed short);
39312     vector signed short vec_and (vector signed short, vector bool short);
39313     vector signed short vec_and (vector signed short, vector signed short);
39314     vector unsigned short vec_and (vector bool short,
39315                                    vector unsigned short);
39316     vector unsigned short vec_and (vector unsigned short,
39317                                    vector bool short);
39318     vector unsigned short vec_and (vector unsigned short,
39319                                    vector unsigned short);
39320     vector signed char vec_and (vector bool char, vector signed char);
39321     vector bool char vec_and (vector bool char, vector bool char);
39322     vector signed char vec_and (vector signed char, vector bool char);
39323     vector signed char vec_and (vector signed char, vector signed char);
39324     vector unsigned char vec_and (vector bool char, vector unsigned char);
39325     vector unsigned char vec_and (vector unsigned char, vector bool char);
39326     vector unsigned char vec_and (vector unsigned char,
39327                                   vector unsigned char);
39328
39329     vector float vec_andc (vector float, vector float);
39330     vector float vec_andc (vector float, vector bool int);
39331     vector float vec_andc (vector bool int, vector float);
39332     vector bool int vec_andc (vector bool int, vector bool int);
39333     vector signed int vec_andc (vector bool int, vector signed int);
39334     vector signed int vec_andc (vector signed int, vector bool int);
39335     vector signed int vec_andc (vector signed int, vector signed int);
39336     vector unsigned int vec_andc (vector bool int, vector unsigned int);
39337     vector unsigned int vec_andc (vector unsigned int, vector bool int);
39338     vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
39339     vector bool short vec_andc (vector bool short, vector bool short);
39340     vector signed short vec_andc (vector bool short, vector signed short);
39341     vector signed short vec_andc (vector signed short, vector bool short);
39342     vector signed short vec_andc (vector signed short, vector signed short);
39343     vector unsigned short vec_andc (vector bool short,
39344                                     vector unsigned short);
39345     vector unsigned short vec_andc (vector unsigned short,
39346                                     vector bool short);
39347     vector unsigned short vec_andc (vector unsigned short,
39348                                     vector unsigned short);
39349     vector signed char vec_andc (vector bool char, vector signed char);
39350     vector bool char vec_andc (vector bool char, vector bool char);
39351     vector signed char vec_andc (vector signed char, vector bool char);
39352     vector signed char vec_andc (vector signed char, vector signed char);
39353     vector unsigned char vec_andc (vector bool char, vector unsigned char);
39354     vector unsigned char vec_andc (vector unsigned char, vector bool char);
39355     vector unsigned char vec_andc (vector unsigned char,
39356                                    vector unsigned char);
39357
39358     vector unsigned char vec_avg (vector unsigned char,
39359                                   vector unsigned char);
39360     vector signed char vec_avg (vector signed char, vector signed char);
39361     vector unsigned short vec_avg (vector unsigned short,
39362                                    vector unsigned short);
39363     vector signed short vec_avg (vector signed short, vector signed short);
39364     vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
39365     vector signed int vec_avg (vector signed int, vector signed int);
39366
39367     vector signed int vec_vavgsw (vector signed int, vector signed int);
39368
39369     vector unsigned int vec_vavguw (vector unsigned int,
39370                                     vector unsigned int);
39371
39372     vector signed short vec_vavgsh (vector signed short,
39373                                     vector signed short);
39374
39375     vector unsigned short vec_vavguh (vector unsigned short,
39376                                       vector unsigned short);
39377
39378     vector signed char vec_vavgsb (vector signed char, vector signed char);
39379
39380     vector unsigned char vec_vavgub (vector unsigned char,
39381                                      vector unsigned char);
39382
39383     vector float vec_copysign (vector float);
39384
39385     vector float vec_ceil (vector float);
39386
39387     vector signed int vec_cmpb (vector float, vector float);
39388
39389     vector bool char vec_cmpeq (vector signed char, vector signed char);
39390     vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
39391     vector bool short vec_cmpeq (vector signed short, vector signed short);
39392     vector bool short vec_cmpeq (vector unsigned short,
39393                                  vector unsigned short);
39394     vector bool int vec_cmpeq (vector signed int, vector signed int);
39395     vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
39396     vector bool int vec_cmpeq (vector float, vector float);
39397
39398     vector bool int vec_vcmpeqfp (vector float, vector float);
39399
39400     vector bool int vec_vcmpequw (vector signed int, vector signed int);
39401     vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
39402
39403     vector bool short vec_vcmpequh (vector signed short,
39404                                     vector signed short);
39405     vector bool short vec_vcmpequh (vector unsigned short,
39406                                     vector unsigned short);
39407
39408     vector bool char vec_vcmpequb (vector signed char, vector signed char);
39409     vector bool char vec_vcmpequb (vector unsigned char,
39410                                    vector unsigned char);
39411
39412     vector bool int vec_cmpge (vector float, vector float);
39413
39414     vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
39415     vector bool char vec_cmpgt (vector signed char, vector signed char);
39416     vector bool short vec_cmpgt (vector unsigned short,
39417                                  vector unsigned short);
39418     vector bool short vec_cmpgt (vector signed short, vector signed short);
39419     vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
39420     vector bool int vec_cmpgt (vector signed int, vector signed int);
39421     vector bool int vec_cmpgt (vector float, vector float);
39422
39423     vector bool int vec_vcmpgtfp (vector float, vector float);
39424
39425     vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
39426
39427     vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
39428
39429     vector bool short vec_vcmpgtsh (vector signed short,
39430                                     vector signed short);
39431
39432     vector bool short vec_vcmpgtuh (vector unsigned short,
39433                                     vector unsigned short);
39434
39435     vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
39436
39437     vector bool char vec_vcmpgtub (vector unsigned char,
39438                                    vector unsigned char);
39439
39440     vector bool int vec_cmple (vector float, vector float);
39441
39442     vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
39443     vector bool char vec_cmplt (vector signed char, vector signed char);
39444     vector bool short vec_cmplt (vector unsigned short,
39445                                  vector unsigned short);
39446     vector bool short vec_cmplt (vector signed short, vector signed short);
39447     vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
39448     vector bool int vec_cmplt (vector signed int, vector signed int);
39449     vector bool int vec_cmplt (vector float, vector float);
39450
39451     vector float vec_cpsgn (vector float, vector float);
39452
39453     vector float vec_ctf (vector unsigned int, const int);
39454     vector float vec_ctf (vector signed int, const int);
39455     vector double vec_ctf (vector unsigned long, const int);
39456     vector double vec_ctf (vector signed long, const int);
39457
39458     vector float vec_vcfsx (vector signed int, const int);
39459
39460     vector float vec_vcfux (vector unsigned int, const int);
39461
39462     vector signed int vec_cts (vector float, const int);
39463     vector signed long vec_cts (vector double, const int);
39464
39465     vector unsigned int vec_ctu (vector float, const int);
39466     vector unsigned long vec_ctu (vector double, const int);
39467
39468     void vec_dss (const int);
39469
39470     void vec_dssall (void);
39471
39472     void vec_dst (const vector unsigned char *, int, const int);
39473     void vec_dst (const vector signed char *, int, const int);
39474     void vec_dst (const vector bool char *, int, const int);
39475     void vec_dst (const vector unsigned short *, int, const int);
39476     void vec_dst (const vector signed short *, int, const int);
39477     void vec_dst (const vector bool short *, int, const int);
39478     void vec_dst (const vector pixel *, int, const int);
39479     void vec_dst (const vector unsigned int *, int, const int);
39480     void vec_dst (const vector signed int *, int, const int);
39481     void vec_dst (const vector bool int *, int, const int);
39482     void vec_dst (const vector float *, int, const int);
39483     void vec_dst (const unsigned char *, int, const int);
39484     void vec_dst (const signed char *, int, const int);
39485     void vec_dst (const unsigned short *, int, const int);
39486     void vec_dst (const short *, int, const int);
39487     void vec_dst (const unsigned int *, int, const int);
39488     void vec_dst (const int *, int, const int);
39489     void vec_dst (const unsigned long *, int, const int);
39490     void vec_dst (const long *, int, const int);
39491     void vec_dst (const float *, int, const int);
39492
39493     void vec_dstst (const vector unsigned char *, int, const int);
39494     void vec_dstst (const vector signed char *, int, const int);
39495     void vec_dstst (const vector bool char *, int, const int);
39496     void vec_dstst (const vector unsigned short *, int, const int);
39497     void vec_dstst (const vector signed short *, int, const int);
39498     void vec_dstst (const vector bool short *, int, const int);
39499     void vec_dstst (const vector pixel *, int, const int);
39500     void vec_dstst (const vector unsigned int *, int, const int);
39501     void vec_dstst (const vector signed int *, int, const int);
39502     void vec_dstst (const vector bool int *, int, const int);
39503     void vec_dstst (const vector float *, int, const int);
39504     void vec_dstst (const unsigned char *, int, const int);
39505     void vec_dstst (const signed char *, int, const int);
39506     void vec_dstst (const unsigned short *, int, const int);
39507     void vec_dstst (const short *, int, const int);
39508     void vec_dstst (const unsigned int *, int, const int);
39509     void vec_dstst (const int *, int, const int);
39510     void vec_dstst (const unsigned long *, int, const int);
39511     void vec_dstst (const long *, int, const int);
39512     void vec_dstst (const float *, int, const int);
39513
39514     void vec_dststt (const vector unsigned char *, int, const int);
39515     void vec_dststt (const vector signed char *, int, const int);
39516     void vec_dststt (const vector bool char *, int, const int);
39517     void vec_dststt (const vector unsigned short *, int, const int);
39518     void vec_dststt (const vector signed short *, int, const int);
39519     void vec_dststt (const vector bool short *, int, const int);
39520     void vec_dststt (const vector pixel *, int, const int);
39521     void vec_dststt (const vector unsigned int *, int, const int);
39522     void vec_dststt (const vector signed int *, int, const int);
39523     void vec_dststt (const vector bool int *, int, const int);
39524     void vec_dststt (const vector float *, int, const int);
39525     void vec_dststt (const unsigned char *, int, const int);
39526     void vec_dststt (const signed char *, int, const int);
39527     void vec_dststt (const unsigned short *, int, const int);
39528     void vec_dststt (const short *, int, const int);
39529     void vec_dststt (const unsigned int *, int, const int);
39530     void vec_dststt (const int *, int, const int);
39531     void vec_dststt (const unsigned long *, int, const int);
39532     void vec_dststt (const long *, int, const int);
39533     void vec_dststt (const float *, int, const int);
39534
39535     void vec_dstt (const vector unsigned char *, int, const int);
39536     void vec_dstt (const vector signed char *, int, const int);
39537     void vec_dstt (const vector bool char *, int, const int);
39538     void vec_dstt (const vector unsigned short *, int, const int);
39539     void vec_dstt (const vector signed short *, int, const int);
39540     void vec_dstt (const vector bool short *, int, const int);
39541     void vec_dstt (const vector pixel *, int, const int);
39542     void vec_dstt (const vector unsigned int *, int, const int);
39543     void vec_dstt (const vector signed int *, int, const int);
39544     void vec_dstt (const vector bool int *, int, const int);
39545     void vec_dstt (const vector float *, int, const int);
39546     void vec_dstt (const unsigned char *, int, const int);
39547     void vec_dstt (const signed char *, int, const int);
39548     void vec_dstt (const unsigned short *, int, const int);
39549     void vec_dstt (const short *, int, const int);
39550     void vec_dstt (const unsigned int *, int, const int);
39551     void vec_dstt (const int *, int, const int);
39552     void vec_dstt (const unsigned long *, int, const int);
39553     void vec_dstt (const long *, int, const int);
39554     void vec_dstt (const float *, int, const int);
39555
39556     vector float vec_expte (vector float);
39557
39558     vector float vec_floor (vector float);
39559
39560     vector float vec_ld (int, const vector float *);
39561     vector float vec_ld (int, const float *);
39562     vector bool int vec_ld (int, const vector bool int *);
39563     vector signed int vec_ld (int, const vector signed int *);
39564     vector signed int vec_ld (int, const int *);
39565     vector signed int vec_ld (int, const long *);
39566     vector unsigned int vec_ld (int, const vector unsigned int *);
39567     vector unsigned int vec_ld (int, const unsigned int *);
39568     vector unsigned int vec_ld (int, const unsigned long *);
39569     vector bool short vec_ld (int, const vector bool short *);
39570     vector pixel vec_ld (int, const vector pixel *);
39571     vector signed short vec_ld (int, const vector signed short *);
39572     vector signed short vec_ld (int, const short *);
39573     vector unsigned short vec_ld (int, const vector unsigned short *);
39574     vector unsigned short vec_ld (int, const unsigned short *);
39575     vector bool char vec_ld (int, const vector bool char *);
39576     vector signed char vec_ld (int, const vector signed char *);
39577     vector signed char vec_ld (int, const signed char *);
39578     vector unsigned char vec_ld (int, const vector unsigned char *);
39579     vector unsigned char vec_ld (int, const unsigned char *);
39580
39581     vector signed char vec_lde (int, const signed char *);
39582     vector unsigned char vec_lde (int, const unsigned char *);
39583     vector signed short vec_lde (int, const short *);
39584     vector unsigned short vec_lde (int, const unsigned short *);
39585     vector float vec_lde (int, const float *);
39586     vector signed int vec_lde (int, const int *);
39587     vector unsigned int vec_lde (int, const unsigned int *);
39588     vector signed int vec_lde (int, const long *);
39589     vector unsigned int vec_lde (int, const unsigned long *);
39590
39591     vector float vec_lvewx (int, float *);
39592     vector signed int vec_lvewx (int, int *);
39593     vector unsigned int vec_lvewx (int, unsigned int *);
39594     vector signed int vec_lvewx (int, long *);
39595     vector unsigned int vec_lvewx (int, unsigned long *);
39596
39597     vector signed short vec_lvehx (int, short *);
39598     vector unsigned short vec_lvehx (int, unsigned short *);
39599
39600     vector signed char vec_lvebx (int, char *);
39601     vector unsigned char vec_lvebx (int, unsigned char *);
39602
39603     vector float vec_ldl (int, const vector float *);
39604     vector float vec_ldl (int, const float *);
39605     vector bool int vec_ldl (int, const vector bool int *);
39606     vector signed int vec_ldl (int, const vector signed int *);
39607     vector signed int vec_ldl (int, const int *);
39608     vector signed int vec_ldl (int, const long *);
39609     vector unsigned int vec_ldl (int, const vector unsigned int *);
39610     vector unsigned int vec_ldl (int, const unsigned int *);
39611     vector unsigned int vec_ldl (int, const unsigned long *);
39612     vector bool short vec_ldl (int, const vector bool short *);
39613     vector pixel vec_ldl (int, const vector pixel *);
39614     vector signed short vec_ldl (int, const vector signed short *);
39615     vector signed short vec_ldl (int, const short *);
39616     vector unsigned short vec_ldl (int, const vector unsigned short *);
39617     vector unsigned short vec_ldl (int, const unsigned short *);
39618     vector bool char vec_ldl (int, const vector bool char *);
39619     vector signed char vec_ldl (int, const vector signed char *);
39620     vector signed char vec_ldl (int, const signed char *);
39621     vector unsigned char vec_ldl (int, const vector unsigned char *);
39622     vector unsigned char vec_ldl (int, const unsigned char *);
39623
39624     vector float vec_loge (vector float);
39625
39626     vector unsigned char vec_lvsl (int, const volatile unsigned char *);
39627     vector unsigned char vec_lvsl (int, const volatile signed char *);
39628     vector unsigned char vec_lvsl (int, const volatile unsigned short *);
39629     vector unsigned char vec_lvsl (int, const volatile short *);
39630     vector unsigned char vec_lvsl (int, const volatile unsigned int *);
39631     vector unsigned char vec_lvsl (int, const volatile int *);
39632     vector unsigned char vec_lvsl (int, const volatile unsigned long *);
39633     vector unsigned char vec_lvsl (int, const volatile long *);
39634     vector unsigned char vec_lvsl (int, const volatile float *);
39635
39636     vector unsigned char vec_lvsr (int, const volatile unsigned char *);
39637     vector unsigned char vec_lvsr (int, const volatile signed char *);
39638     vector unsigned char vec_lvsr (int, const volatile unsigned short *);
39639     vector unsigned char vec_lvsr (int, const volatile short *);
39640     vector unsigned char vec_lvsr (int, const volatile unsigned int *);
39641     vector unsigned char vec_lvsr (int, const volatile int *);
39642     vector unsigned char vec_lvsr (int, const volatile unsigned long *);
39643     vector unsigned char vec_lvsr (int, const volatile long *);
39644     vector unsigned char vec_lvsr (int, const volatile float *);
39645
39646     vector float vec_madd (vector float, vector float, vector float);
39647
39648     vector signed short vec_madds (vector signed short,
39649                                    vector signed short,
39650                                    vector signed short);
39651
39652     vector unsigned char vec_max (vector bool char, vector unsigned char);
39653     vector unsigned char vec_max (vector unsigned char, vector bool char);
39654     vector unsigned char vec_max (vector unsigned char,
39655                                   vector unsigned char);
39656     vector signed char vec_max (vector bool char, vector signed char);
39657     vector signed char vec_max (vector signed char, vector bool char);
39658     vector signed char vec_max (vector signed char, vector signed char);
39659     vector unsigned short vec_max (vector bool short,
39660                                    vector unsigned short);
39661     vector unsigned short vec_max (vector unsigned short,
39662                                    vector bool short);
39663     vector unsigned short vec_max (vector unsigned short,
39664                                    vector unsigned short);
39665     vector signed short vec_max (vector bool short, vector signed short);
39666     vector signed short vec_max (vector signed short, vector bool short);
39667     vector signed short vec_max (vector signed short, vector signed short);
39668     vector unsigned int vec_max (vector bool int, vector unsigned int);
39669     vector unsigned int vec_max (vector unsigned int, vector bool int);
39670     vector unsigned int vec_max (vector unsigned int, vector unsigned int);
39671     vector signed int vec_max (vector bool int, vector signed int);
39672     vector signed int vec_max (vector signed int, vector bool int);
39673     vector signed int vec_max (vector signed int, vector signed int);
39674     vector float vec_max (vector float, vector float);
39675
39676     vector float vec_vmaxfp (vector float, vector float);
39677
39678     vector signed int vec_vmaxsw (vector bool int, vector signed int);
39679     vector signed int vec_vmaxsw (vector signed int, vector bool int);
39680     vector signed int vec_vmaxsw (vector signed int, vector signed int);
39681
39682     vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
39683     vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
39684     vector unsigned int vec_vmaxuw (vector unsigned int,
39685                                     vector unsigned int);
39686
39687     vector signed short vec_vmaxsh (vector bool short, vector signed short);
39688     vector signed short vec_vmaxsh (vector signed short, vector bool short);
39689     vector signed short vec_vmaxsh (vector signed short,
39690                                     vector signed short);
39691
39692     vector unsigned short vec_vmaxuh (vector bool short,
39693                                       vector unsigned short);
39694     vector unsigned short vec_vmaxuh (vector unsigned short,
39695                                       vector bool short);
39696     vector unsigned short vec_vmaxuh (vector unsigned short,
39697                                       vector unsigned short);
39698
39699     vector signed char vec_vmaxsb (vector bool char, vector signed char);
39700     vector signed char vec_vmaxsb (vector signed char, vector bool char);
39701     vector signed char vec_vmaxsb (vector signed char, vector signed char);
39702
39703     vector unsigned char vec_vmaxub (vector bool char,
39704                                      vector unsigned char);
39705     vector unsigned char vec_vmaxub (vector unsigned char,
39706                                      vector bool char);
39707     vector unsigned char vec_vmaxub (vector unsigned char,
39708                                      vector unsigned char);
39709
39710     vector bool char vec_mergeh (vector bool char, vector bool char);
39711     vector signed char vec_mergeh (vector signed char, vector signed char);
39712     vector unsigned char vec_mergeh (vector unsigned char,
39713                                      vector unsigned char);
39714     vector bool short vec_mergeh (vector bool short, vector bool short);
39715     vector pixel vec_mergeh (vector pixel, vector pixel);
39716     vector signed short vec_mergeh (vector signed short,
39717                                     vector signed short);
39718     vector unsigned short vec_mergeh (vector unsigned short,
39719                                       vector unsigned short);
39720     vector float vec_mergeh (vector float, vector float);
39721     vector bool int vec_mergeh (vector bool int, vector bool int);
39722     vector signed int vec_mergeh (vector signed int, vector signed int);
39723     vector unsigned int vec_mergeh (vector unsigned int,
39724                                     vector unsigned int);
39725
39726     vector float vec_vmrghw (vector float, vector float);
39727     vector bool int vec_vmrghw (vector bool int, vector bool int);
39728     vector signed int vec_vmrghw (vector signed int, vector signed int);
39729     vector unsigned int vec_vmrghw (vector unsigned int,
39730                                     vector unsigned int);
39731
39732     vector bool short vec_vmrghh (vector bool short, vector bool short);
39733     vector signed short vec_vmrghh (vector signed short,
39734                                     vector signed short);
39735     vector unsigned short vec_vmrghh (vector unsigned short,
39736                                       vector unsigned short);
39737     vector pixel vec_vmrghh (vector pixel, vector pixel);
39738
39739     vector bool char vec_vmrghb (vector bool char, vector bool char);
39740     vector signed char vec_vmrghb (vector signed char, vector signed char);
39741     vector unsigned char vec_vmrghb (vector unsigned char,
39742                                      vector unsigned char);
39743
39744     vector bool char vec_mergel (vector bool char, vector bool char);
39745     vector signed char vec_mergel (vector signed char, vector signed char);
39746     vector unsigned char vec_mergel (vector unsigned char,
39747                                      vector unsigned char);
39748     vector bool short vec_mergel (vector bool short, vector bool short);
39749     vector pixel vec_mergel (vector pixel, vector pixel);
39750     vector signed short vec_mergel (vector signed short,
39751                                     vector signed short);
39752     vector unsigned short vec_mergel (vector unsigned short,
39753                                       vector unsigned short);
39754     vector float vec_mergel (vector float, vector float);
39755     vector bool int vec_mergel (vector bool int, vector bool int);
39756     vector signed int vec_mergel (vector signed int, vector signed int);
39757     vector unsigned int vec_mergel (vector unsigned int,
39758                                     vector unsigned int);
39759
39760     vector float vec_vmrglw (vector float, vector float);
39761     vector signed int vec_vmrglw (vector signed int, vector signed int);
39762     vector unsigned int vec_vmrglw (vector unsigned int,
39763                                     vector unsigned int);
39764     vector bool int vec_vmrglw (vector bool int, vector bool int);
39765
39766     vector bool short vec_vmrglh (vector bool short, vector bool short);
39767     vector signed short vec_vmrglh (vector signed short,
39768                                     vector signed short);
39769     vector unsigned short vec_vmrglh (vector unsigned short,
39770                                       vector unsigned short);
39771     vector pixel vec_vmrglh (vector pixel, vector pixel);
39772
39773     vector bool char vec_vmrglb (vector bool char, vector bool char);
39774     vector signed char vec_vmrglb (vector signed char, vector signed char);
39775     vector unsigned char vec_vmrglb (vector unsigned char,
39776                                      vector unsigned char);
39777
39778     vector unsigned short vec_mfvscr (void);
39779
39780     vector unsigned char vec_min (vector bool char, vector unsigned char);
39781     vector unsigned char vec_min (vector unsigned char, vector bool char);
39782     vector unsigned char vec_min (vector unsigned char,
39783                                   vector unsigned char);
39784     vector signed char vec_min (vector bool char, vector signed char);
39785     vector signed char vec_min (vector signed char, vector bool char);
39786     vector signed char vec_min (vector signed char, vector signed char);
39787     vector unsigned short vec_min (vector bool short,
39788                                    vector unsigned short);
39789     vector unsigned short vec_min (vector unsigned short,
39790                                    vector bool short);
39791     vector unsigned short vec_min (vector unsigned short,
39792                                    vector unsigned short);
39793     vector signed short vec_min (vector bool short, vector signed short);
39794     vector signed short vec_min (vector signed short, vector bool short);
39795     vector signed short vec_min (vector signed short, vector signed short);
39796     vector unsigned int vec_min (vector bool int, vector unsigned int);
39797     vector unsigned int vec_min (vector unsigned int, vector bool int);
39798     vector unsigned int vec_min (vector unsigned int, vector unsigned int);
39799     vector signed int vec_min (vector bool int, vector signed int);
39800     vector signed int vec_min (vector signed int, vector bool int);
39801     vector signed int vec_min (vector signed int, vector signed int);
39802     vector float vec_min (vector float, vector float);
39803
39804     vector float vec_vminfp (vector float, vector float);
39805
39806     vector signed int vec_vminsw (vector bool int, vector signed int);
39807     vector signed int vec_vminsw (vector signed int, vector bool int);
39808     vector signed int vec_vminsw (vector signed int, vector signed int);
39809
39810     vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
39811     vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
39812     vector unsigned int vec_vminuw (vector unsigned int,
39813                                     vector unsigned int);
39814
39815     vector signed short vec_vminsh (vector bool short, vector signed short);
39816     vector signed short vec_vminsh (vector signed short, vector bool short);
39817     vector signed short vec_vminsh (vector signed short,
39818                                     vector signed short);
39819
39820     vector unsigned short vec_vminuh (vector bool short,
39821                                       vector unsigned short);
39822     vector unsigned short vec_vminuh (vector unsigned short,
39823                                       vector bool short);
39824     vector unsigned short vec_vminuh (vector unsigned short,
39825                                       vector unsigned short);
39826
39827     vector signed char vec_vminsb (vector bool char, vector signed char);
39828     vector signed char vec_vminsb (vector signed char, vector bool char);
39829     vector signed char vec_vminsb (vector signed char, vector signed char);
39830
39831     vector unsigned char vec_vminub (vector bool char,
39832                                      vector unsigned char);
39833     vector unsigned char vec_vminub (vector unsigned char,
39834                                      vector bool char);
39835     vector unsigned char vec_vminub (vector unsigned char,
39836                                      vector unsigned char);
39837
39838     vector signed short vec_mladd (vector signed short,
39839                                    vector signed short,
39840                                    vector signed short);
39841     vector signed short vec_mladd (vector signed short,
39842                                    vector unsigned short,
39843                                    vector unsigned short);
39844     vector signed short vec_mladd (vector unsigned short,
39845                                    vector signed short,
39846                                    vector signed short);
39847     vector unsigned short vec_mladd (vector unsigned short,
39848                                      vector unsigned short,
39849                                      vector unsigned short);
39850
39851     vector signed short vec_mradds (vector signed short,
39852                                     vector signed short,
39853                                     vector signed short);
39854
39855     vector unsigned int vec_msum (vector unsigned char,
39856                                   vector unsigned char,
39857                                   vector unsigned int);
39858     vector signed int vec_msum (vector signed char,
39859                                 vector unsigned char,
39860                                 vector signed int);
39861     vector unsigned int vec_msum (vector unsigned short,
39862                                   vector unsigned short,
39863                                   vector unsigned int);
39864     vector signed int vec_msum (vector signed short,
39865                                 vector signed short,
39866                                 vector signed int);
39867
39868     vector signed int vec_vmsumshm (vector signed short,
39869                                     vector signed short,
39870                                     vector signed int);
39871
39872     vector unsigned int vec_vmsumuhm (vector unsigned short,
39873                                       vector unsigned short,
39874                                       vector unsigned int);
39875
39876     vector signed int vec_vmsummbm (vector signed char,
39877                                     vector unsigned char,
39878                                     vector signed int);
39879
39880     vector unsigned int vec_vmsumubm (vector unsigned char,
39881                                       vector unsigned char,
39882                                       vector unsigned int);
39883
39884     vector unsigned int vec_msums (vector unsigned short,
39885                                    vector unsigned short,
39886                                    vector unsigned int);
39887     vector signed int vec_msums (vector signed short,
39888                                  vector signed short,
39889                                  vector signed int);
39890
39891     vector signed int vec_vmsumshs (vector signed short,
39892                                     vector signed short,
39893                                     vector signed int);
39894
39895     vector unsigned int vec_vmsumuhs (vector unsigned short,
39896                                       vector unsigned short,
39897                                       vector unsigned int);
39898
39899     void vec_mtvscr (vector signed int);
39900     void vec_mtvscr (vector unsigned int);
39901     void vec_mtvscr (vector bool int);
39902     void vec_mtvscr (vector signed short);
39903     void vec_mtvscr (vector unsigned short);
39904     void vec_mtvscr (vector bool short);
39905     void vec_mtvscr (vector pixel);
39906     void vec_mtvscr (vector signed char);
39907     void vec_mtvscr (vector unsigned char);
39908     void vec_mtvscr (vector bool char);
39909
39910     vector unsigned short vec_mule (vector unsigned char,
39911                                     vector unsigned char);
39912     vector signed short vec_mule (vector signed char,
39913                                   vector signed char);
39914     vector unsigned int vec_mule (vector unsigned short,
39915                                   vector unsigned short);
39916     vector signed int vec_mule (vector signed short, vector signed short);
39917
39918     vector signed int vec_vmulesh (vector signed short,
39919                                    vector signed short);
39920
39921     vector unsigned int vec_vmuleuh (vector unsigned short,
39922                                      vector unsigned short);
39923
39924     vector signed short vec_vmulesb (vector signed char,
39925                                      vector signed char);
39926
39927     vector unsigned short vec_vmuleub (vector unsigned char,
39928                                       vector unsigned char);
39929
39930     vector unsigned short vec_mulo (vector unsigned char,
39931                                     vector unsigned char);
39932     vector signed short vec_mulo (vector signed char, vector signed char);
39933     vector unsigned int vec_mulo (vector unsigned short,
39934                                   vector unsigned short);
39935     vector signed int vec_mulo (vector signed short, vector signed short);
39936
39937     vector signed int vec_vmulosh (vector signed short,
39938                                    vector signed short);
39939
39940     vector unsigned int vec_vmulouh (vector unsigned short,
39941                                      vector unsigned short);
39942
39943     vector signed short vec_vmulosb (vector signed char,
39944                                      vector signed char);
39945
39946     vector unsigned short vec_vmuloub (vector unsigned char,
39947                                        vector unsigned char);
39948
39949     vector float vec_nmsub (vector float, vector float, vector float);
39950
39951     vector float vec_nor (vector float, vector float);
39952     vector signed int vec_nor (vector signed int, vector signed int);
39953     vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
39954     vector bool int vec_nor (vector bool int, vector bool int);
39955     vector signed short vec_nor (vector signed short, vector signed short);
39956     vector unsigned short vec_nor (vector unsigned short,
39957                                    vector unsigned short);
39958     vector bool short vec_nor (vector bool short, vector bool short);
39959     vector signed char vec_nor (vector signed char, vector signed char);
39960     vector unsigned char vec_nor (vector unsigned char,
39961                                   vector unsigned char);
39962     vector bool char vec_nor (vector bool char, vector bool char);
39963
39964     vector float vec_or (vector float, vector float);
39965     vector float vec_or (vector float, vector bool int);
39966     vector float vec_or (vector bool int, vector float);
39967     vector bool int vec_or (vector bool int, vector bool int);
39968     vector signed int vec_or (vector bool int, vector signed int);
39969     vector signed int vec_or (vector signed int, vector bool int);
39970     vector signed int vec_or (vector signed int, vector signed int);
39971     vector unsigned int vec_or (vector bool int, vector unsigned int);
39972     vector unsigned int vec_or (vector unsigned int, vector bool int);
39973     vector unsigned int vec_or (vector unsigned int, vector unsigned int);
39974     vector bool short vec_or (vector bool short, vector bool short);
39975     vector signed short vec_or (vector bool short, vector signed short);
39976     vector signed short vec_or (vector signed short, vector bool short);
39977     vector signed short vec_or (vector signed short, vector signed short);
39978     vector unsigned short vec_or (vector bool short, vector unsigned short);
39979     vector unsigned short vec_or (vector unsigned short, vector bool short);
39980     vector unsigned short vec_or (vector unsigned short,
39981                                   vector unsigned short);
39982     vector signed char vec_or (vector bool char, vector signed char);
39983     vector bool char vec_or (vector bool char, vector bool char);
39984     vector signed char vec_or (vector signed char, vector bool char);
39985     vector signed char vec_or (vector signed char, vector signed char);
39986     vector unsigned char vec_or (vector bool char, vector unsigned char);
39987     vector unsigned char vec_or (vector unsigned char, vector bool char);
39988     vector unsigned char vec_or (vector unsigned char,
39989                                  vector unsigned char);
39990
39991     vector signed char vec_pack (vector signed short, vector signed short);
39992     vector unsigned char vec_pack (vector unsigned short,
39993                                    vector unsigned short);
39994     vector bool char vec_pack (vector bool short, vector bool short);
39995     vector signed short vec_pack (vector signed int, vector signed int);
39996     vector unsigned short vec_pack (vector unsigned int,
39997                                     vector unsigned int);
39998     vector bool short vec_pack (vector bool int, vector bool int);
39999
40000     vector bool short vec_vpkuwum (vector bool int, vector bool int);
40001     vector signed short vec_vpkuwum (vector signed int, vector signed int);
40002     vector unsigned short vec_vpkuwum (vector unsigned int,
40003                                        vector unsigned int);
40004
40005     vector bool char vec_vpkuhum (vector bool short, vector bool short);
40006     vector signed char vec_vpkuhum (vector signed short,
40007                                     vector signed short);
40008     vector unsigned char vec_vpkuhum (vector unsigned short,
40009                                       vector unsigned short);
40010
40011     vector pixel vec_packpx (vector unsigned int, vector unsigned int);
40012
40013     vector unsigned char vec_packs (vector unsigned short,
40014                                     vector unsigned short);
40015     vector signed char vec_packs (vector signed short, vector signed short);
40016     vector unsigned short vec_packs (vector unsigned int,
40017                                      vector unsigned int);
40018     vector signed short vec_packs (vector signed int, vector signed int);
40019
40020     vector signed short vec_vpkswss (vector signed int, vector signed int);
40021
40022     vector unsigned short vec_vpkuwus (vector unsigned int,
40023                                        vector unsigned int);
40024
40025     vector signed char vec_vpkshss (vector signed short,
40026                                     vector signed short);
40027
40028     vector unsigned char vec_vpkuhus (vector unsigned short,
40029                                       vector unsigned short);
40030
40031     vector unsigned char vec_packsu (vector unsigned short,
40032                                      vector unsigned short);
40033     vector unsigned char vec_packsu (vector signed short,
40034                                      vector signed short);
40035     vector unsigned short vec_packsu (vector unsigned int,
40036                                       vector unsigned int);
40037     vector unsigned short vec_packsu (vector signed int, vector signed int);
40038
40039     vector unsigned short vec_vpkswus (vector signed int,
40040                                        vector signed int);
40041
40042     vector unsigned char vec_vpkshus (vector signed short,
40043                                       vector signed short);
40044
40045     vector float vec_perm (vector float,
40046                            vector float,
40047                            vector unsigned char);
40048     vector signed int vec_perm (vector signed int,
40049                                 vector signed int,
40050                                 vector unsigned char);
40051     vector unsigned int vec_perm (vector unsigned int,
40052                                   vector unsigned int,
40053                                   vector unsigned char);
40054     vector bool int vec_perm (vector bool int,
40055                               vector bool int,
40056                               vector unsigned char);
40057     vector signed short vec_perm (vector signed short,
40058                                   vector signed short,
40059                                   vector unsigned char);
40060     vector unsigned short vec_perm (vector unsigned short,
40061                                     vector unsigned short,
40062                                     vector unsigned char);
40063     vector bool short vec_perm (vector bool short,
40064                                 vector bool short,
40065                                 vector unsigned char);
40066     vector pixel vec_perm (vector pixel,
40067                            vector pixel,
40068                            vector unsigned char);
40069     vector signed char vec_perm (vector signed char,
40070                                  vector signed char,
40071                                  vector unsigned char);
40072     vector unsigned char vec_perm (vector unsigned char,
40073                                    vector unsigned char,
40074                                    vector unsigned char);
40075     vector bool char vec_perm (vector bool char,
40076                                vector bool char,
40077                                vector unsigned char);
40078
40079     vector float vec_re (vector float);
40080
40081     vector signed char vec_rl (vector signed char,
40082                                vector unsigned char);
40083     vector unsigned char vec_rl (vector unsigned char,
40084                                  vector unsigned char);
40085     vector signed short vec_rl (vector signed short, vector unsigned short);
40086     vector unsigned short vec_rl (vector unsigned short,
40087                                   vector unsigned short);
40088     vector signed int vec_rl (vector signed int, vector unsigned int);
40089     vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
40090
40091     vector signed int vec_vrlw (vector signed int, vector unsigned int);
40092     vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
40093
40094     vector signed short vec_vrlh (vector signed short,
40095                                   vector unsigned short);
40096     vector unsigned short vec_vrlh (vector unsigned short,
40097                                     vector unsigned short);
40098
40099     vector signed char vec_vrlb (vector signed char, vector unsigned char);
40100     vector unsigned char vec_vrlb (vector unsigned char,
40101                                    vector unsigned char);
40102
40103     vector float vec_round (vector float);
40104
40105     vector float vec_recip (vector float, vector float);
40106
40107     vector float vec_rsqrt (vector float);
40108
40109     vector float vec_rsqrte (vector float);
40110
40111     vector float vec_sel (vector float, vector float, vector bool int);
40112     vector float vec_sel (vector float, vector float, vector unsigned int);
40113     vector signed int vec_sel (vector signed int,
40114                                vector signed int,
40115                                vector bool int);
40116     vector signed int vec_sel (vector signed int,
40117                                vector signed int,
40118                                vector unsigned int);
40119     vector unsigned int vec_sel (vector unsigned int,
40120                                  vector unsigned int,
40121                                  vector bool int);
40122     vector unsigned int vec_sel (vector unsigned int,
40123                                  vector unsigned int,
40124                                  vector unsigned int);
40125     vector bool int vec_sel (vector bool int,
40126                              vector bool int,
40127                              vector bool int);
40128     vector bool int vec_sel (vector bool int,
40129                              vector bool int,
40130                              vector unsigned int);
40131     vector signed short vec_sel (vector signed short,
40132                                  vector signed short,
40133                                  vector bool short);
40134     vector signed short vec_sel (vector signed short,
40135                                  vector signed short,
40136                                  vector unsigned short);
40137     vector unsigned short vec_sel (vector unsigned short,
40138                                    vector unsigned short,
40139                                    vector bool short);
40140     vector unsigned short vec_sel (vector unsigned short,
40141                                    vector unsigned short,
40142                                    vector unsigned short);
40143     vector bool short vec_sel (vector bool short,
40144                                vector bool short,
40145                                vector bool short);
40146     vector bool short vec_sel (vector bool short,
40147                                vector bool short,
40148                                vector unsigned short);
40149     vector signed char vec_sel (vector signed char,
40150                                 vector signed char,
40151                                 vector bool char);
40152     vector signed char vec_sel (vector signed char,
40153                                 vector signed char,
40154                                 vector unsigned char);
40155     vector unsigned char vec_sel (vector unsigned char,
40156                                   vector unsigned char,
40157                                   vector bool char);
40158     vector unsigned char vec_sel (vector unsigned char,
40159                                   vector unsigned char,
40160                                   vector unsigned char);
40161     vector bool char vec_sel (vector bool char,
40162                               vector bool char,
40163                               vector bool char);
40164     vector bool char vec_sel (vector bool char,
40165                               vector bool char,
40166                               vector unsigned char);
40167
40168     vector signed char vec_sl (vector signed char,
40169                                vector unsigned char);
40170     vector unsigned char vec_sl (vector unsigned char,
40171                                  vector unsigned char);
40172     vector signed short vec_sl (vector signed short, vector unsigned short);
40173     vector unsigned short vec_sl (vector unsigned short,
40174                                   vector unsigned short);
40175     vector signed int vec_sl (vector signed int, vector unsigned int);
40176     vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
40177
40178     vector signed int vec_vslw (vector signed int, vector unsigned int);
40179     vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
40180
40181     vector signed short vec_vslh (vector signed short,
40182                                   vector unsigned short);
40183     vector unsigned short vec_vslh (vector unsigned short,
40184                                     vector unsigned short);
40185
40186     vector signed char vec_vslb (vector signed char, vector unsigned char);
40187     vector unsigned char vec_vslb (vector unsigned char,
40188                                    vector unsigned char);
40189
40190     vector float vec_sld (vector float, vector float, const int);
40191     vector signed int vec_sld (vector signed int,
40192                                vector signed int,
40193                                const int);
40194     vector unsigned int vec_sld (vector unsigned int,
40195                                  vector unsigned int,
40196                                  const int);
40197     vector bool int vec_sld (vector bool int,
40198                              vector bool int,
40199                              const int);
40200     vector signed short vec_sld (vector signed short,
40201                                  vector signed short,
40202                                  const int);
40203     vector unsigned short vec_sld (vector unsigned short,
40204                                    vector unsigned short,
40205                                    const int);
40206     vector bool short vec_sld (vector bool short,
40207                                vector bool short,
40208                                const int);
40209     vector pixel vec_sld (vector pixel,
40210                           vector pixel,
40211                           const int);
40212     vector signed char vec_sld (vector signed char,
40213                                 vector signed char,
40214                                 const int);
40215     vector unsigned char vec_sld (vector unsigned char,
40216                                   vector unsigned char,
40217                                   const int);
40218     vector bool char vec_sld (vector bool char,
40219                               vector bool char,
40220                               const int);
40221
40222     vector signed int vec_sll (vector signed int,
40223                                vector unsigned int);
40224     vector signed int vec_sll (vector signed int,
40225                                vector unsigned short);
40226     vector signed int vec_sll (vector signed int,
40227                                vector unsigned char);
40228     vector unsigned int vec_sll (vector unsigned int,
40229                                  vector unsigned int);
40230     vector unsigned int vec_sll (vector unsigned int,
40231                                  vector unsigned short);
40232     vector unsigned int vec_sll (vector unsigned int,
40233                                  vector unsigned char);
40234     vector bool int vec_sll (vector bool int,
40235                              vector unsigned int);
40236     vector bool int vec_sll (vector bool int,
40237                              vector unsigned short);
40238     vector bool int vec_sll (vector bool int,
40239                              vector unsigned char);
40240     vector signed short vec_sll (vector signed short,
40241                                  vector unsigned int);
40242     vector signed short vec_sll (vector signed short,
40243                                  vector unsigned short);
40244     vector signed short vec_sll (vector signed short,
40245                                  vector unsigned char);
40246     vector unsigned short vec_sll (vector unsigned short,
40247                                    vector unsigned int);
40248     vector unsigned short vec_sll (vector unsigned short,
40249                                    vector unsigned short);
40250     vector unsigned short vec_sll (vector unsigned short,
40251                                    vector unsigned char);
40252     vector bool short vec_sll (vector bool short, vector unsigned int);
40253     vector bool short vec_sll (vector bool short, vector unsigned short);
40254     vector bool short vec_sll (vector bool short, vector unsigned char);
40255     vector pixel vec_sll (vector pixel, vector unsigned int);
40256     vector pixel vec_sll (vector pixel, vector unsigned short);
40257     vector pixel vec_sll (vector pixel, vector unsigned char);
40258     vector signed char vec_sll (vector signed char, vector unsigned int);
40259     vector signed char vec_sll (vector signed char, vector unsigned short);
40260     vector signed char vec_sll (vector signed char, vector unsigned char);
40261     vector unsigned char vec_sll (vector unsigned char,
40262                                   vector unsigned int);
40263     vector unsigned char vec_sll (vector unsigned char,
40264                                   vector unsigned short);
40265     vector unsigned char vec_sll (vector unsigned char,
40266                                   vector unsigned char);
40267     vector bool char vec_sll (vector bool char, vector unsigned int);
40268     vector bool char vec_sll (vector bool char, vector unsigned short);
40269     vector bool char vec_sll (vector bool char, vector unsigned char);
40270
40271     vector float vec_slo (vector float, vector signed char);
40272     vector float vec_slo (vector float, vector unsigned char);
40273     vector signed int vec_slo (vector signed int, vector signed char);
40274     vector signed int vec_slo (vector signed int, vector unsigned char);
40275     vector unsigned int vec_slo (vector unsigned int, vector signed char);
40276     vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
40277     vector signed short vec_slo (vector signed short, vector signed char);
40278     vector signed short vec_slo (vector signed short, vector unsigned char);
40279     vector unsigned short vec_slo (vector unsigned short,
40280                                    vector signed char);
40281     vector unsigned short vec_slo (vector unsigned short,
40282                                    vector unsigned char);
40283     vector pixel vec_slo (vector pixel, vector signed char);
40284     vector pixel vec_slo (vector pixel, vector unsigned char);
40285     vector signed char vec_slo (vector signed char, vector signed char);
40286     vector signed char vec_slo (vector signed char, vector unsigned char);
40287     vector unsigned char vec_slo (vector unsigned char, vector signed char);
40288     vector unsigned char vec_slo (vector unsigned char,
40289                                   vector unsigned char);
40290
40291     vector signed char vec_splat (vector signed char, const int);
40292     vector unsigned char vec_splat (vector unsigned char, const int);
40293     vector bool char vec_splat (vector bool char, const int);
40294     vector signed short vec_splat (vector signed short, const int);
40295     vector unsigned short vec_splat (vector unsigned short, const int);
40296     vector bool short vec_splat (vector bool short, const int);
40297     vector pixel vec_splat (vector pixel, const int);
40298     vector float vec_splat (vector float, const int);
40299     vector signed int vec_splat (vector signed int, const int);
40300     vector unsigned int vec_splat (vector unsigned int, const int);
40301     vector bool int vec_splat (vector bool int, const int);
40302     vector signed long vec_splat (vector signed long, const int);
40303     vector unsigned long vec_splat (vector unsigned long, const int);
40304
40305     vector signed char vec_splats (signed char);
40306     vector unsigned char vec_splats (unsigned char);
40307     vector signed short vec_splats (signed short);
40308     vector unsigned short vec_splats (unsigned short);
40309     vector signed int vec_splats (signed int);
40310     vector unsigned int vec_splats (unsigned int);
40311     vector float vec_splats (float);
40312
40313     vector float vec_vspltw (vector float, const int);
40314     vector signed int vec_vspltw (vector signed int, const int);
40315     vector unsigned int vec_vspltw (vector unsigned int, const int);
40316     vector bool int vec_vspltw (vector bool int, const int);
40317
40318     vector bool short vec_vsplth (vector bool short, const int);
40319     vector signed short vec_vsplth (vector signed short, const int);
40320     vector unsigned short vec_vsplth (vector unsigned short, const int);
40321     vector pixel vec_vsplth (vector pixel, const int);
40322
40323     vector signed char vec_vspltb (vector signed char, const int);
40324     vector unsigned char vec_vspltb (vector unsigned char, const int);
40325     vector bool char vec_vspltb (vector bool char, const int);
40326
40327     vector signed char vec_splat_s8 (const int);
40328
40329     vector signed short vec_splat_s16 (const int);
40330
40331     vector signed int vec_splat_s32 (const int);
40332
40333     vector unsigned char vec_splat_u8 (const int);
40334
40335     vector unsigned short vec_splat_u16 (const int);
40336
40337     vector unsigned int vec_splat_u32 (const int);
40338
40339     vector signed char vec_sr (vector signed char, vector unsigned char);
40340     vector unsigned char vec_sr (vector unsigned char,
40341                                  vector unsigned char);
40342     vector signed short vec_sr (vector signed short,
40343                                 vector unsigned short);
40344     vector unsigned short vec_sr (vector unsigned short,
40345                                   vector unsigned short);
40346     vector signed int vec_sr (vector signed int, vector unsigned int);
40347     vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
40348
40349     vector signed int vec_vsrw (vector signed int, vector unsigned int);
40350     vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
40351
40352     vector signed short vec_vsrh (vector signed short,
40353                                   vector unsigned short);
40354     vector unsigned short vec_vsrh (vector unsigned short,
40355                                     vector unsigned short);
40356
40357     vector signed char vec_vsrb (vector signed char, vector unsigned char);
40358     vector unsigned char vec_vsrb (vector unsigned char,
40359                                    vector unsigned char);
40360
40361     vector signed char vec_sra (vector signed char, vector unsigned char);
40362     vector unsigned char vec_sra (vector unsigned char,
40363                                   vector unsigned char);
40364     vector signed short vec_sra (vector signed short,
40365                                  vector unsigned short);
40366     vector unsigned short vec_sra (vector unsigned short,
40367                                    vector unsigned short);
40368     vector signed int vec_sra (vector signed int, vector unsigned int);
40369     vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
40370
40371     vector signed int vec_vsraw (vector signed int, vector unsigned int);
40372     vector unsigned int vec_vsraw (vector unsigned int,
40373                                    vector unsigned int);
40374
40375     vector signed short vec_vsrah (vector signed short,
40376                                    vector unsigned short);
40377     vector unsigned short vec_vsrah (vector unsigned short,
40378                                      vector unsigned short);
40379
40380     vector signed char vec_vsrab (vector signed char, vector unsigned char);
40381     vector unsigned char vec_vsrab (vector unsigned char,
40382                                     vector unsigned char);
40383
40384     vector signed int vec_srl (vector signed int, vector unsigned int);
40385     vector signed int vec_srl (vector signed int, vector unsigned short);
40386     vector signed int vec_srl (vector signed int, vector unsigned char);
40387     vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
40388     vector unsigned int vec_srl (vector unsigned int,
40389                                  vector unsigned short);
40390     vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
40391     vector bool int vec_srl (vector bool int, vector unsigned int);
40392     vector bool int vec_srl (vector bool int, vector unsigned short);
40393     vector bool int vec_srl (vector bool int, vector unsigned char);
40394     vector signed short vec_srl (vector signed short, vector unsigned int);
40395     vector signed short vec_srl (vector signed short,
40396                                  vector unsigned short);
40397     vector signed short vec_srl (vector signed short, vector unsigned char);
40398     vector unsigned short vec_srl (vector unsigned short,
40399                                    vector unsigned int);
40400     vector unsigned short vec_srl (vector unsigned short,
40401                                    vector unsigned short);
40402     vector unsigned short vec_srl (vector unsigned short,
40403                                    vector unsigned char);
40404     vector bool short vec_srl (vector bool short, vector unsigned int);
40405     vector bool short vec_srl (vector bool short, vector unsigned short);
40406     vector bool short vec_srl (vector bool short, vector unsigned char);
40407     vector pixel vec_srl (vector pixel, vector unsigned int);
40408     vector pixel vec_srl (vector pixel, vector unsigned short);
40409     vector pixel vec_srl (vector pixel, vector unsigned char);
40410     vector signed char vec_srl (vector signed char, vector unsigned int);
40411     vector signed char vec_srl (vector signed char, vector unsigned short);
40412     vector signed char vec_srl (vector signed char, vector unsigned char);
40413     vector unsigned char vec_srl (vector unsigned char,
40414                                   vector unsigned int);
40415     vector unsigned char vec_srl (vector unsigned char,
40416                                   vector unsigned short);
40417     vector unsigned char vec_srl (vector unsigned char,
40418                                   vector unsigned char);
40419     vector bool char vec_srl (vector bool char, vector unsigned int);
40420     vector bool char vec_srl (vector bool char, vector unsigned short);
40421     vector bool char vec_srl (vector bool char, vector unsigned char);
40422
40423     vector float vec_sro (vector float, vector signed char);
40424     vector float vec_sro (vector float, vector unsigned char);
40425     vector signed int vec_sro (vector signed int, vector signed char);
40426     vector signed int vec_sro (vector signed int, vector unsigned char);
40427     vector unsigned int vec_sro (vector unsigned int, vector signed char);
40428     vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
40429     vector signed short vec_sro (vector signed short, vector signed char);
40430     vector signed short vec_sro (vector signed short, vector unsigned char);
40431     vector unsigned short vec_sro (vector unsigned short,
40432                                    vector signed char);
40433     vector unsigned short vec_sro (vector unsigned short,
40434                                    vector unsigned char);
40435     vector pixel vec_sro (vector pixel, vector signed char);
40436     vector pixel vec_sro (vector pixel, vector unsigned char);
40437     vector signed char vec_sro (vector signed char, vector signed char);
40438     vector signed char vec_sro (vector signed char, vector unsigned char);
40439     vector unsigned char vec_sro (vector unsigned char, vector signed char);
40440     vector unsigned char vec_sro (vector unsigned char,
40441                                   vector unsigned char);
40442
40443     void vec_st (vector float, int, vector float *);
40444     void vec_st (vector float, int, float *);
40445     void vec_st (vector signed int, int, vector signed int *);
40446     void vec_st (vector signed int, int, int *);
40447     void vec_st (vector unsigned int, int, vector unsigned int *);
40448     void vec_st (vector unsigned int, int, unsigned int *);
40449     void vec_st (vector bool int, int, vector bool int *);
40450     void vec_st (vector bool int, int, unsigned int *);
40451     void vec_st (vector bool int, int, int *);
40452     void vec_st (vector signed short, int, vector signed short *);
40453     void vec_st (vector signed short, int, short *);
40454     void vec_st (vector unsigned short, int, vector unsigned short *);
40455     void vec_st (vector unsigned short, int, unsigned short *);
40456     void vec_st (vector bool short, int, vector bool short *);
40457     void vec_st (vector bool short, int, unsigned short *);
40458     void vec_st (vector pixel, int, vector pixel *);
40459     void vec_st (vector pixel, int, unsigned short *);
40460     void vec_st (vector pixel, int, short *);
40461     void vec_st (vector bool short, int, short *);
40462     void vec_st (vector signed char, int, vector signed char *);
40463     void vec_st (vector signed char, int, signed char *);
40464     void vec_st (vector unsigned char, int, vector unsigned char *);
40465     void vec_st (vector unsigned char, int, unsigned char *);
40466     void vec_st (vector bool char, int, vector bool char *);
40467     void vec_st (vector bool char, int, unsigned char *);
40468     void vec_st (vector bool char, int, signed char *);
40469
40470     void vec_ste (vector signed char, int, signed char *);
40471     void vec_ste (vector unsigned char, int, unsigned char *);
40472     void vec_ste (vector bool char, int, signed char *);
40473     void vec_ste (vector bool char, int, unsigned char *);
40474     void vec_ste (vector signed short, int, short *);
40475     void vec_ste (vector unsigned short, int, unsigned short *);
40476     void vec_ste (vector bool short, int, short *);
40477     void vec_ste (vector bool short, int, unsigned short *);
40478     void vec_ste (vector pixel, int, short *);
40479     void vec_ste (vector pixel, int, unsigned short *);
40480     void vec_ste (vector float, int, float *);
40481     void vec_ste (vector signed int, int, int *);
40482     void vec_ste (vector unsigned int, int, unsigned int *);
40483     void vec_ste (vector bool int, int, int *);
40484     void vec_ste (vector bool int, int, unsigned int *);
40485
40486     void vec_stvewx (vector float, int, float *);
40487     void vec_stvewx (vector signed int, int, int *);
40488     void vec_stvewx (vector unsigned int, int, unsigned int *);
40489     void vec_stvewx (vector bool int, int, int *);
40490     void vec_stvewx (vector bool int, int, unsigned int *);
40491
40492     void vec_stvehx (vector signed short, int, short *);
40493     void vec_stvehx (vector unsigned short, int, unsigned short *);
40494     void vec_stvehx (vector bool short, int, short *);
40495     void vec_stvehx (vector bool short, int, unsigned short *);
40496     void vec_stvehx (vector pixel, int, short *);
40497     void vec_stvehx (vector pixel, int, unsigned short *);
40498
40499     void vec_stvebx (vector signed char, int, signed char *);
40500     void vec_stvebx (vector unsigned char, int, unsigned char *);
40501     void vec_stvebx (vector bool char, int, signed char *);
40502     void vec_stvebx (vector bool char, int, unsigned char *);
40503
40504     void vec_stl (vector float, int, vector float *);
40505     void vec_stl (vector float, int, float *);
40506     void vec_stl (vector signed int, int, vector signed int *);
40507     void vec_stl (vector signed int, int, int *);
40508     void vec_stl (vector unsigned int, int, vector unsigned int *);
40509     void vec_stl (vector unsigned int, int, unsigned int *);
40510     void vec_stl (vector bool int, int, vector bool int *);
40511     void vec_stl (vector bool int, int, unsigned int *);
40512     void vec_stl (vector bool int, int, int *);
40513     void vec_stl (vector signed short, int, vector signed short *);
40514     void vec_stl (vector signed short, int, short *);
40515     void vec_stl (vector unsigned short, int, vector unsigned short *);
40516     void vec_stl (vector unsigned short, int, unsigned short *);
40517     void vec_stl (vector bool short, int, vector bool short *);
40518     void vec_stl (vector bool short, int, unsigned short *);
40519     void vec_stl (vector bool short, int, short *);
40520     void vec_stl (vector pixel, int, vector pixel *);
40521     void vec_stl (vector pixel, int, unsigned short *);
40522     void vec_stl (vector pixel, int, short *);
40523     void vec_stl (vector signed char, int, vector signed char *);
40524     void vec_stl (vector signed char, int, signed char *);
40525     void vec_stl (vector unsigned char, int, vector unsigned char *);
40526     void vec_stl (vector unsigned char, int, unsigned char *);
40527     void vec_stl (vector bool char, int, vector bool char *);
40528     void vec_stl (vector bool char, int, unsigned char *);
40529     void vec_stl (vector bool char, int, signed char *);
40530
40531     vector signed char vec_sub (vector bool char, vector signed char);
40532     vector signed char vec_sub (vector signed char, vector bool char);
40533     vector signed char vec_sub (vector signed char, vector signed char);
40534     vector unsigned char vec_sub (vector bool char, vector unsigned char);
40535     vector unsigned char vec_sub (vector unsigned char, vector bool char);
40536     vector unsigned char vec_sub (vector unsigned char,
40537                                   vector unsigned char);
40538     vector signed short vec_sub (vector bool short, vector signed short);
40539     vector signed short vec_sub (vector signed short, vector bool short);
40540     vector signed short vec_sub (vector signed short, vector signed short);
40541     vector unsigned short vec_sub (vector bool short,
40542                                    vector unsigned short);
40543     vector unsigned short vec_sub (vector unsigned short,
40544                                    vector bool short);
40545     vector unsigned short vec_sub (vector unsigned short,
40546                                    vector unsigned short);
40547     vector signed int vec_sub (vector bool int, vector signed int);
40548     vector signed int vec_sub (vector signed int, vector bool int);
40549     vector signed int vec_sub (vector signed int, vector signed int);
40550     vector unsigned int vec_sub (vector bool int, vector unsigned int);
40551     vector unsigned int vec_sub (vector unsigned int, vector bool int);
40552     vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
40553     vector float vec_sub (vector float, vector float);
40554
40555     vector float vec_vsubfp (vector float, vector float);
40556
40557     vector signed int vec_vsubuwm (vector bool int, vector signed int);
40558     vector signed int vec_vsubuwm (vector signed int, vector bool int);
40559     vector signed int vec_vsubuwm (vector signed int, vector signed int);
40560     vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
40561     vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
40562     vector unsigned int vec_vsubuwm (vector unsigned int,
40563                                      vector unsigned int);
40564
40565     vector signed short vec_vsubuhm (vector bool short,
40566                                      vector signed short);
40567     vector signed short vec_vsubuhm (vector signed short,
40568                                      vector bool short);
40569     vector signed short vec_vsubuhm (vector signed short,
40570                                      vector signed short);
40571     vector unsigned short vec_vsubuhm (vector bool short,
40572                                        vector unsigned short);
40573     vector unsigned short vec_vsubuhm (vector unsigned short,
40574                                        vector bool short);
40575     vector unsigned short vec_vsubuhm (vector unsigned short,
40576                                        vector unsigned short);
40577
40578     vector signed char vec_vsububm (vector bool char, vector signed char);
40579     vector signed char vec_vsububm (vector signed char, vector bool char);
40580     vector signed char vec_vsububm (vector signed char, vector signed char);
40581     vector unsigned char vec_vsububm (vector bool char,
40582                                       vector unsigned char);
40583     vector unsigned char vec_vsububm (vector unsigned char,
40584                                       vector bool char);
40585     vector unsigned char vec_vsububm (vector unsigned char,
40586                                       vector unsigned char);
40587
40588     vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
40589
40590     vector unsigned char vec_subs (vector bool char, vector unsigned char);
40591     vector unsigned char vec_subs (vector unsigned char, vector bool char);
40592     vector unsigned char vec_subs (vector unsigned char,
40593                                    vector unsigned char);
40594     vector signed char vec_subs (vector bool char, vector signed char);
40595     vector signed char vec_subs (vector signed char, vector bool char);
40596     vector signed char vec_subs (vector signed char, vector signed char);
40597     vector unsigned short vec_subs (vector bool short,
40598                                     vector unsigned short);
40599     vector unsigned short vec_subs (vector unsigned short,
40600                                     vector bool short);
40601     vector unsigned short vec_subs (vector unsigned short,
40602                                     vector unsigned short);
40603     vector signed short vec_subs (vector bool short, vector signed short);
40604     vector signed short vec_subs (vector signed short, vector bool short);
40605     vector signed short vec_subs (vector signed short, vector signed short);
40606     vector unsigned int vec_subs (vector bool int, vector unsigned int);
40607     vector unsigned int vec_subs (vector unsigned int, vector bool int);
40608     vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
40609     vector signed int vec_subs (vector bool int, vector signed int);
40610     vector signed int vec_subs (vector signed int, vector bool int);
40611     vector signed int vec_subs (vector signed int, vector signed int);
40612
40613     vector signed int vec_vsubsws (vector bool int, vector signed int);
40614     vector signed int vec_vsubsws (vector signed int, vector bool int);
40615     vector signed int vec_vsubsws (vector signed int, vector signed int);
40616
40617     vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
40618     vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
40619     vector unsigned int vec_vsubuws (vector unsigned int,
40620                                      vector unsigned int);
40621
40622     vector signed short vec_vsubshs (vector bool short,
40623                                      vector signed short);
40624     vector signed short vec_vsubshs (vector signed short,
40625                                      vector bool short);
40626     vector signed short vec_vsubshs (vector signed short,
40627                                      vector signed short);
40628
40629     vector unsigned short vec_vsubuhs (vector bool short,
40630                                        vector unsigned short);
40631     vector unsigned short vec_vsubuhs (vector unsigned short,
40632                                        vector bool short);
40633     vector unsigned short vec_vsubuhs (vector unsigned short,
40634                                        vector unsigned short);
40635
40636     vector signed char vec_vsubsbs (vector bool char, vector signed char);
40637     vector signed char vec_vsubsbs (vector signed char, vector bool char);
40638     vector signed char vec_vsubsbs (vector signed char, vector signed char);
40639
40640     vector unsigned char vec_vsububs (vector bool char,
40641                                       vector unsigned char);
40642     vector unsigned char vec_vsububs (vector unsigned char,
40643                                       vector bool char);
40644     vector unsigned char vec_vsububs (vector unsigned char,
40645                                       vector unsigned char);
40646
40647     vector unsigned int vec_sum4s (vector unsigned char,
40648                                    vector unsigned int);
40649     vector signed int vec_sum4s (vector signed char, vector signed int);
40650     vector signed int vec_sum4s (vector signed short, vector signed int);
40651
40652     vector signed int vec_vsum4shs (vector signed short, vector signed int);
40653
40654     vector signed int vec_vsum4sbs (vector signed char, vector signed int);
40655
40656     vector unsigned int vec_vsum4ubs (vector unsigned char,
40657                                       vector unsigned int);
40658
40659     vector signed int vec_sum2s (vector signed int, vector signed int);
40660
40661     vector signed int vec_sums (vector signed int, vector signed int);
40662
40663     vector float vec_trunc (vector float);
40664
40665     vector signed short vec_unpackh (vector signed char);
40666     vector bool short vec_unpackh (vector bool char);
40667     vector signed int vec_unpackh (vector signed short);
40668     vector bool int vec_unpackh (vector bool short);
40669     vector unsigned int vec_unpackh (vector pixel);
40670
40671     vector bool int vec_vupkhsh (vector bool short);
40672     vector signed int vec_vupkhsh (vector signed short);
40673
40674     vector unsigned int vec_vupkhpx (vector pixel);
40675
40676     vector bool short vec_vupkhsb (vector bool char);
40677     vector signed short vec_vupkhsb (vector signed char);
40678
40679     vector signed short vec_unpackl (vector signed char);
40680     vector bool short vec_unpackl (vector bool char);
40681     vector unsigned int vec_unpackl (vector pixel);
40682     vector signed int vec_unpackl (vector signed short);
40683     vector bool int vec_unpackl (vector bool short);
40684
40685     vector unsigned int vec_vupklpx (vector pixel);
40686
40687     vector bool int vec_vupklsh (vector bool short);
40688     vector signed int vec_vupklsh (vector signed short);
40689
40690     vector bool short vec_vupklsb (vector bool char);
40691     vector signed short vec_vupklsb (vector signed char);
40692
40693     vector float vec_xor (vector float, vector float);
40694     vector float vec_xor (vector float, vector bool int);
40695     vector float vec_xor (vector bool int, vector float);
40696     vector bool int vec_xor (vector bool int, vector bool int);
40697     vector signed int vec_xor (vector bool int, vector signed int);
40698     vector signed int vec_xor (vector signed int, vector bool int);
40699     vector signed int vec_xor (vector signed int, vector signed int);
40700     vector unsigned int vec_xor (vector bool int, vector unsigned int);
40701     vector unsigned int vec_xor (vector unsigned int, vector bool int);
40702     vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
40703     vector bool short vec_xor (vector bool short, vector bool short);
40704     vector signed short vec_xor (vector bool short, vector signed short);
40705     vector signed short vec_xor (vector signed short, vector bool short);
40706     vector signed short vec_xor (vector signed short, vector signed short);
40707     vector unsigned short vec_xor (vector bool short,
40708                                    vector unsigned short);
40709     vector unsigned short vec_xor (vector unsigned short,
40710                                    vector bool short);
40711     vector unsigned short vec_xor (vector unsigned short,
40712                                    vector unsigned short);
40713     vector signed char vec_xor (vector bool char, vector signed char);
40714     vector bool char vec_xor (vector bool char, vector bool char);
40715     vector signed char vec_xor (vector signed char, vector bool char);
40716     vector signed char vec_xor (vector signed char, vector signed char);
40717     vector unsigned char vec_xor (vector bool char, vector unsigned char);
40718     vector unsigned char vec_xor (vector unsigned char, vector bool char);
40719     vector unsigned char vec_xor (vector unsigned char,
40720                                   vector unsigned char);
40721
40722     int vec_all_eq (vector signed char, vector bool char);
40723     int vec_all_eq (vector signed char, vector signed char);
40724     int vec_all_eq (vector unsigned char, vector bool char);
40725     int vec_all_eq (vector unsigned char, vector unsigned char);
40726     int vec_all_eq (vector bool char, vector bool char);
40727     int vec_all_eq (vector bool char, vector unsigned char);
40728     int vec_all_eq (vector bool char, vector signed char);
40729     int vec_all_eq (vector signed short, vector bool short);
40730     int vec_all_eq (vector signed short, vector signed short);
40731     int vec_all_eq (vector unsigned short, vector bool short);
40732     int vec_all_eq (vector unsigned short, vector unsigned short);
40733     int vec_all_eq (vector bool short, vector bool short);
40734     int vec_all_eq (vector bool short, vector unsigned short);
40735     int vec_all_eq (vector bool short, vector signed short);
40736     int vec_all_eq (vector pixel, vector pixel);
40737     int vec_all_eq (vector signed int, vector bool int);
40738     int vec_all_eq (vector signed int, vector signed int);
40739     int vec_all_eq (vector unsigned int, vector bool int);
40740     int vec_all_eq (vector unsigned int, vector unsigned int);
40741     int vec_all_eq (vector bool int, vector bool int);
40742     int vec_all_eq (vector bool int, vector unsigned int);
40743     int vec_all_eq (vector bool int, vector signed int);
40744     int vec_all_eq (vector float, vector float);
40745
40746     int vec_all_ge (vector bool char, vector unsigned char);
40747     int vec_all_ge (vector unsigned char, vector bool char);
40748     int vec_all_ge (vector unsigned char, vector unsigned char);
40749     int vec_all_ge (vector bool char, vector signed char);
40750     int vec_all_ge (vector signed char, vector bool char);
40751     int vec_all_ge (vector signed char, vector signed char);
40752     int vec_all_ge (vector bool short, vector unsigned short);
40753     int vec_all_ge (vector unsigned short, vector bool short);
40754     int vec_all_ge (vector unsigned short, vector unsigned short);
40755     int vec_all_ge (vector signed short, vector signed short);
40756     int vec_all_ge (vector bool short, vector signed short);
40757     int vec_all_ge (vector signed short, vector bool short);
40758     int vec_all_ge (vector bool int, vector unsigned int);
40759     int vec_all_ge (vector unsigned int, vector bool int);
40760     int vec_all_ge (vector unsigned int, vector unsigned int);
40761     int vec_all_ge (vector bool int, vector signed int);
40762     int vec_all_ge (vector signed int, vector bool int);
40763     int vec_all_ge (vector signed int, vector signed int);
40764     int vec_all_ge (vector float, vector float);
40765
40766     int vec_all_gt (vector bool char, vector unsigned char);
40767     int vec_all_gt (vector unsigned char, vector bool char);
40768     int vec_all_gt (vector unsigned char, vector unsigned char);
40769     int vec_all_gt (vector bool char, vector signed char);
40770     int vec_all_gt (vector signed char, vector bool char);
40771     int vec_all_gt (vector signed char, vector signed char);
40772     int vec_all_gt (vector bool short, vector unsigned short);
40773     int vec_all_gt (vector unsigned short, vector bool short);
40774     int vec_all_gt (vector unsigned short, vector unsigned short);
40775     int vec_all_gt (vector bool short, vector signed short);
40776     int vec_all_gt (vector signed short, vector bool short);
40777     int vec_all_gt (vector signed short, vector signed short);
40778     int vec_all_gt (vector bool int, vector unsigned int);
40779     int vec_all_gt (vector unsigned int, vector bool int);
40780     int vec_all_gt (vector unsigned int, vector unsigned int);
40781     int vec_all_gt (vector bool int, vector signed int);
40782     int vec_all_gt (vector signed int, vector bool int);
40783     int vec_all_gt (vector signed int, vector signed int);
40784     int vec_all_gt (vector float, vector float);
40785
40786     int vec_all_in (vector float, vector float);
40787
40788     int vec_all_le (vector bool char, vector unsigned char);
40789     int vec_all_le (vector unsigned char, vector bool char);
40790     int vec_all_le (vector unsigned char, vector unsigned char);
40791     int vec_all_le (vector bool char, vector signed char);
40792     int vec_all_le (vector signed char, vector bool char);
40793     int vec_all_le (vector signed char, vector signed char);
40794     int vec_all_le (vector bool short, vector unsigned short);
40795     int vec_all_le (vector unsigned short, vector bool short);
40796     int vec_all_le (vector unsigned short, vector unsigned short);
40797     int vec_all_le (vector bool short, vector signed short);
40798     int vec_all_le (vector signed short, vector bool short);
40799     int vec_all_le (vector signed short, vector signed short);
40800     int vec_all_le (vector bool int, vector unsigned int);
40801     int vec_all_le (vector unsigned int, vector bool int);
40802     int vec_all_le (vector unsigned int, vector unsigned int);
40803     int vec_all_le (vector bool int, vector signed int);
40804     int vec_all_le (vector signed int, vector bool int);
40805     int vec_all_le (vector signed int, vector signed int);
40806     int vec_all_le (vector float, vector float);
40807
40808     int vec_all_lt (vector bool char, vector unsigned char);
40809     int vec_all_lt (vector unsigned char, vector bool char);
40810     int vec_all_lt (vector unsigned char, vector unsigned char);
40811     int vec_all_lt (vector bool char, vector signed char);
40812     int vec_all_lt (vector signed char, vector bool char);
40813     int vec_all_lt (vector signed char, vector signed char);
40814     int vec_all_lt (vector bool short, vector unsigned short);
40815     int vec_all_lt (vector unsigned short, vector bool short);
40816     int vec_all_lt (vector unsigned short, vector unsigned short);
40817     int vec_all_lt (vector bool short, vector signed short);
40818     int vec_all_lt (vector signed short, vector bool short);
40819     int vec_all_lt (vector signed short, vector signed short);
40820     int vec_all_lt (vector bool int, vector unsigned int);
40821     int vec_all_lt (vector unsigned int, vector bool int);
40822     int vec_all_lt (vector unsigned int, vector unsigned int);
40823     int vec_all_lt (vector bool int, vector signed int);
40824     int vec_all_lt (vector signed int, vector bool int);
40825     int vec_all_lt (vector signed int, vector signed int);
40826     int vec_all_lt (vector float, vector float);
40827
40828     int vec_all_nan (vector float);
40829
40830     int vec_all_ne (vector signed char, vector bool char);
40831     int vec_all_ne (vector signed char, vector signed char);
40832     int vec_all_ne (vector unsigned char, vector bool char);
40833     int vec_all_ne (vector unsigned char, vector unsigned char);
40834     int vec_all_ne (vector bool char, vector bool char);
40835     int vec_all_ne (vector bool char, vector unsigned char);
40836     int vec_all_ne (vector bool char, vector signed char);
40837     int vec_all_ne (vector signed short, vector bool short);
40838     int vec_all_ne (vector signed short, vector signed short);
40839     int vec_all_ne (vector unsigned short, vector bool short);
40840     int vec_all_ne (vector unsigned short, vector unsigned short);
40841     int vec_all_ne (vector bool short, vector bool short);
40842     int vec_all_ne (vector bool short, vector unsigned short);
40843     int vec_all_ne (vector bool short, vector signed short);
40844     int vec_all_ne (vector pixel, vector pixel);
40845     int vec_all_ne (vector signed int, vector bool int);
40846     int vec_all_ne (vector signed int, vector signed int);
40847     int vec_all_ne (vector unsigned int, vector bool int);
40848     int vec_all_ne (vector unsigned int, vector unsigned int);
40849     int vec_all_ne (vector bool int, vector bool int);
40850     int vec_all_ne (vector bool int, vector unsigned int);
40851     int vec_all_ne (vector bool int, vector signed int);
40852     int vec_all_ne (vector float, vector float);
40853
40854     int vec_all_nge (vector float, vector float);
40855
40856     int vec_all_ngt (vector float, vector float);
40857
40858     int vec_all_nle (vector float, vector float);
40859
40860     int vec_all_nlt (vector float, vector float);
40861
40862     int vec_all_numeric (vector float);
40863
40864     int vec_any_eq (vector signed char, vector bool char);
40865     int vec_any_eq (vector signed char, vector signed char);
40866     int vec_any_eq (vector unsigned char, vector bool char);
40867     int vec_any_eq (vector unsigned char, vector unsigned char);
40868     int vec_any_eq (vector bool char, vector bool char);
40869     int vec_any_eq (vector bool char, vector unsigned char);
40870     int vec_any_eq (vector bool char, vector signed char);
40871     int vec_any_eq (vector signed short, vector bool short);
40872     int vec_any_eq (vector signed short, vector signed short);
40873     int vec_any_eq (vector unsigned short, vector bool short);
40874     int vec_any_eq (vector unsigned short, vector unsigned short);
40875     int vec_any_eq (vector bool short, vector bool short);
40876     int vec_any_eq (vector bool short, vector unsigned short);
40877     int vec_any_eq (vector bool short, vector signed short);
40878     int vec_any_eq (vector pixel, vector pixel);
40879     int vec_any_eq (vector signed int, vector bool int);
40880     int vec_any_eq (vector signed int, vector signed int);
40881     int vec_any_eq (vector unsigned int, vector bool int);
40882     int vec_any_eq (vector unsigned int, vector unsigned int);
40883     int vec_any_eq (vector bool int, vector bool int);
40884     int vec_any_eq (vector bool int, vector unsigned int);
40885     int vec_any_eq (vector bool int, vector signed int);
40886     int vec_any_eq (vector float, vector float);
40887
40888     int vec_any_ge (vector signed char, vector bool char);
40889     int vec_any_ge (vector unsigned char, vector bool char);
40890     int vec_any_ge (vector unsigned char, vector unsigned char);
40891     int vec_any_ge (vector signed char, vector signed char);
40892     int vec_any_ge (vector bool char, vector unsigned char);
40893     int vec_any_ge (vector bool char, vector signed char);
40894     int vec_any_ge (vector unsigned short, vector bool short);
40895     int vec_any_ge (vector unsigned short, vector unsigned short);
40896     int vec_any_ge (vector signed short, vector signed short);
40897     int vec_any_ge (vector signed short, vector bool short);
40898     int vec_any_ge (vector bool short, vector unsigned short);
40899     int vec_any_ge (vector bool short, vector signed short);
40900     int vec_any_ge (vector signed int, vector bool int);
40901     int vec_any_ge (vector unsigned int, vector bool int);
40902     int vec_any_ge (vector unsigned int, vector unsigned int);
40903     int vec_any_ge (vector signed int, vector signed int);
40904     int vec_any_ge (vector bool int, vector unsigned int);
40905     int vec_any_ge (vector bool int, vector signed int);
40906     int vec_any_ge (vector float, vector float);
40907
40908     int vec_any_gt (vector bool char, vector unsigned char);
40909     int vec_any_gt (vector unsigned char, vector bool char);
40910     int vec_any_gt (vector unsigned char, vector unsigned char);
40911     int vec_any_gt (vector bool char, vector signed char);
40912     int vec_any_gt (vector signed char, vector bool char);
40913     int vec_any_gt (vector signed char, vector signed char);
40914     int vec_any_gt (vector bool short, vector unsigned short);
40915     int vec_any_gt (vector unsigned short, vector bool short);
40916     int vec_any_gt (vector unsigned short, vector unsigned short);
40917     int vec_any_gt (vector bool short, vector signed short);
40918     int vec_any_gt (vector signed short, vector bool short);
40919     int vec_any_gt (vector signed short, vector signed short);
40920     int vec_any_gt (vector bool int, vector unsigned int);
40921     int vec_any_gt (vector unsigned int, vector bool int);
40922     int vec_any_gt (vector unsigned int, vector unsigned int);
40923     int vec_any_gt (vector bool int, vector signed int);
40924     int vec_any_gt (vector signed int, vector bool int);
40925     int vec_any_gt (vector signed int, vector signed int);
40926     int vec_any_gt (vector float, vector float);
40927
40928     int vec_any_le (vector bool char, vector unsigned char);
40929     int vec_any_le (vector unsigned char, vector bool char);
40930     int vec_any_le (vector unsigned char, vector unsigned char);
40931     int vec_any_le (vector bool char, vector signed char);
40932     int vec_any_le (vector signed char, vector bool char);
40933     int vec_any_le (vector signed char, vector signed char);
40934     int vec_any_le (vector bool short, vector unsigned short);
40935     int vec_any_le (vector unsigned short, vector bool short);
40936     int vec_any_le (vector unsigned short, vector unsigned short);
40937     int vec_any_le (vector bool short, vector signed short);
40938     int vec_any_le (vector signed short, vector bool short);
40939     int vec_any_le (vector signed short, vector signed short);
40940     int vec_any_le (vector bool int, vector unsigned int);
40941     int vec_any_le (vector unsigned int, vector bool int);
40942     int vec_any_le (vector unsigned int, vector unsigned int);
40943     int vec_any_le (vector bool int, vector signed int);
40944     int vec_any_le (vector signed int, vector bool int);
40945     int vec_any_le (vector signed int, vector signed int);
40946     int vec_any_le (vector float, vector float);
40947
40948     int vec_any_lt (vector bool char, vector unsigned char);
40949     int vec_any_lt (vector unsigned char, vector bool char);
40950     int vec_any_lt (vector unsigned char, vector unsigned char);
40951     int vec_any_lt (vector bool char, vector signed char);
40952     int vec_any_lt (vector signed char, vector bool char);
40953     int vec_any_lt (vector signed char, vector signed char);
40954     int vec_any_lt (vector bool short, vector unsigned short);
40955     int vec_any_lt (vector unsigned short, vector bool short);
40956     int vec_any_lt (vector unsigned short, vector unsigned short);
40957     int vec_any_lt (vector bool short, vector signed short);
40958     int vec_any_lt (vector signed short, vector bool short);
40959     int vec_any_lt (vector signed short, vector signed short);
40960     int vec_any_lt (vector bool int, vector unsigned int);
40961     int vec_any_lt (vector unsigned int, vector bool int);
40962     int vec_any_lt (vector unsigned int, vector unsigned int);
40963     int vec_any_lt (vector bool int, vector signed int);
40964     int vec_any_lt (vector signed int, vector bool int);
40965     int vec_any_lt (vector signed int, vector signed int);
40966     int vec_any_lt (vector float, vector float);
40967
40968     int vec_any_nan (vector float);
40969
40970     int vec_any_ne (vector signed char, vector bool char);
40971     int vec_any_ne (vector signed char, vector signed char);
40972     int vec_any_ne (vector unsigned char, vector bool char);
40973     int vec_any_ne (vector unsigned char, vector unsigned char);
40974     int vec_any_ne (vector bool char, vector bool char);
40975     int vec_any_ne (vector bool char, vector unsigned char);
40976     int vec_any_ne (vector bool char, vector signed char);
40977     int vec_any_ne (vector signed short, vector bool short);
40978     int vec_any_ne (vector signed short, vector signed short);
40979     int vec_any_ne (vector unsigned short, vector bool short);
40980     int vec_any_ne (vector unsigned short, vector unsigned short);
40981     int vec_any_ne (vector bool short, vector bool short);
40982     int vec_any_ne (vector bool short, vector unsigned short);
40983     int vec_any_ne (vector bool short, vector signed short);
40984     int vec_any_ne (vector pixel, vector pixel);
40985     int vec_any_ne (vector signed int, vector bool int);
40986     int vec_any_ne (vector signed int, vector signed int);
40987     int vec_any_ne (vector unsigned int, vector bool int);
40988     int vec_any_ne (vector unsigned int, vector unsigned int);
40989     int vec_any_ne (vector bool int, vector bool int);
40990     int vec_any_ne (vector bool int, vector unsigned int);
40991     int vec_any_ne (vector bool int, vector signed int);
40992     int vec_any_ne (vector float, vector float);
40993
40994     int vec_any_nge (vector float, vector float);
40995
40996     int vec_any_ngt (vector float, vector float);
40997
40998     int vec_any_nle (vector float, vector float);
40999
41000     int vec_any_nlt (vector float, vector float);
41001
41002     int vec_any_numeric (vector float);
41003
41004     int vec_any_out (vector float, vector float);
41005
41006 If the vector/scalar (VSX) instruction set is available, the following
41007additional functions are available:
41008
41009     vector double vec_abs (vector double);
41010     vector double vec_add (vector double, vector double);
41011     vector double vec_and (vector double, vector double);
41012     vector double vec_and (vector double, vector bool long);
41013     vector double vec_and (vector bool long, vector double);
41014     vector long vec_and (vector long, vector long);
41015     vector long vec_and (vector long, vector bool long);
41016     vector long vec_and (vector bool long, vector long);
41017     vector unsigned long vec_and (vector unsigned long, vector unsigned long);
41018     vector unsigned long vec_and (vector unsigned long, vector bool long);
41019     vector unsigned long vec_and (vector bool long, vector unsigned long);
41020     vector double vec_andc (vector double, vector double);
41021     vector double vec_andc (vector double, vector bool long);
41022     vector double vec_andc (vector bool long, vector double);
41023     vector long vec_andc (vector long, vector long);
41024     vector long vec_andc (vector long, vector bool long);
41025     vector long vec_andc (vector bool long, vector long);
41026     vector unsigned long vec_andc (vector unsigned long, vector unsigned long);
41027     vector unsigned long vec_andc (vector unsigned long, vector bool long);
41028     vector unsigned long vec_andc (vector bool long, vector unsigned long);
41029     vector double vec_ceil (vector double);
41030     vector bool long vec_cmpeq (vector double, vector double);
41031     vector bool long vec_cmpge (vector double, vector double);
41032     vector bool long vec_cmpgt (vector double, vector double);
41033     vector bool long vec_cmple (vector double, vector double);
41034     vector bool long vec_cmplt (vector double, vector double);
41035     vector double vec_cpsgn (vector double, vector double);
41036     vector float vec_div (vector float, vector float);
41037     vector double vec_div (vector double, vector double);
41038     vector long vec_div (vector long, vector long);
41039     vector unsigned long vec_div (vector unsigned long, vector unsigned long);
41040     vector double vec_floor (vector double);
41041     vector double vec_ld (int, const vector double *);
41042     vector double vec_ld (int, const double *);
41043     vector double vec_ldl (int, const vector double *);
41044     vector double vec_ldl (int, const double *);
41045     vector unsigned char vec_lvsl (int, const volatile double *);
41046     vector unsigned char vec_lvsr (int, const volatile double *);
41047     vector double vec_madd (vector double, vector double, vector double);
41048     vector double vec_max (vector double, vector double);
41049     vector signed long vec_mergeh (vector signed long, vector signed long);
41050     vector signed long vec_mergeh (vector signed long, vector bool long);
41051     vector signed long vec_mergeh (vector bool long, vector signed long);
41052     vector unsigned long vec_mergeh (vector unsigned long, vector unsigned long);
41053     vector unsigned long vec_mergeh (vector unsigned long, vector bool long);
41054     vector unsigned long vec_mergeh (vector bool long, vector unsigned long);
41055     vector signed long vec_mergel (vector signed long, vector signed long);
41056     vector signed long vec_mergel (vector signed long, vector bool long);
41057     vector signed long vec_mergel (vector bool long, vector signed long);
41058     vector unsigned long vec_mergel (vector unsigned long, vector unsigned long);
41059     vector unsigned long vec_mergel (vector unsigned long, vector bool long);
41060     vector unsigned long vec_mergel (vector bool long, vector unsigned long);
41061     vector double vec_min (vector double, vector double);
41062     vector float vec_msub (vector float, vector float, vector float);
41063     vector double vec_msub (vector double, vector double, vector double);
41064     vector float vec_mul (vector float, vector float);
41065     vector double vec_mul (vector double, vector double);
41066     vector long vec_mul (vector long, vector long);
41067     vector unsigned long vec_mul (vector unsigned long, vector unsigned long);
41068     vector float vec_nearbyint (vector float);
41069     vector double vec_nearbyint (vector double);
41070     vector float vec_nmadd (vector float, vector float, vector float);
41071     vector double vec_nmadd (vector double, vector double, vector double);
41072     vector double vec_nmsub (vector double, vector double, vector double);
41073     vector double vec_nor (vector double, vector double);
41074     vector long vec_nor (vector long, vector long);
41075     vector long vec_nor (vector long, vector bool long);
41076     vector long vec_nor (vector bool long, vector long);
41077     vector unsigned long vec_nor (vector unsigned long, vector unsigned long);
41078     vector unsigned long vec_nor (vector unsigned long, vector bool long);
41079     vector unsigned long vec_nor (vector bool long, vector unsigned long);
41080     vector double vec_or (vector double, vector double);
41081     vector double vec_or (vector double, vector bool long);
41082     vector double vec_or (vector bool long, vector double);
41083     vector long vec_or (vector long, vector long);
41084     vector long vec_or (vector long, vector bool long);
41085     vector long vec_or (vector bool long, vector long);
41086     vector unsigned long vec_or (vector unsigned long, vector unsigned long);
41087     vector unsigned long vec_or (vector unsigned long, vector bool long);
41088     vector unsigned long vec_or (vector bool long, vector unsigned long);
41089     vector double vec_perm (vector double, vector double, vector unsigned char);
41090     vector long vec_perm (vector long, vector long, vector unsigned char);
41091     vector unsigned long vec_perm (vector unsigned long, vector unsigned long,
41092                                    vector unsigned char);
41093     vector double vec_rint (vector double);
41094     vector double vec_recip (vector double, vector double);
41095     vector double vec_rsqrt (vector double);
41096     vector double vec_rsqrte (vector double);
41097     vector double vec_sel (vector double, vector double, vector bool long);
41098     vector double vec_sel (vector double, vector double, vector unsigned long);
41099     vector long vec_sel (vector long, vector long, vector long);
41100     vector long vec_sel (vector long, vector long, vector unsigned long);
41101     vector long vec_sel (vector long, vector long, vector bool long);
41102     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
41103                                   vector long);
41104     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
41105                                   vector unsigned long);
41106     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
41107                                   vector bool long);
41108     vector double vec_splats (double);
41109     vector signed long vec_splats (signed long);
41110     vector unsigned long vec_splats (unsigned long);
41111     vector float vec_sqrt (vector float);
41112     vector double vec_sqrt (vector double);
41113     void vec_st (vector double, int, vector double *);
41114     void vec_st (vector double, int, double *);
41115     vector double vec_sub (vector double, vector double);
41116     vector double vec_trunc (vector double);
41117     vector double vec_xor (vector double, vector double);
41118     vector double vec_xor (vector double, vector bool long);
41119     vector double vec_xor (vector bool long, vector double);
41120     vector long vec_xor (vector long, vector long);
41121     vector long vec_xor (vector long, vector bool long);
41122     vector long vec_xor (vector bool long, vector long);
41123     vector unsigned long vec_xor (vector unsigned long, vector unsigned long);
41124     vector unsigned long vec_xor (vector unsigned long, vector bool long);
41125     vector unsigned long vec_xor (vector bool long, vector unsigned long);
41126     int vec_all_eq (vector double, vector double);
41127     int vec_all_ge (vector double, vector double);
41128     int vec_all_gt (vector double, vector double);
41129     int vec_all_le (vector double, vector double);
41130     int vec_all_lt (vector double, vector double);
41131     int vec_all_nan (vector double);
41132     int vec_all_ne (vector double, vector double);
41133     int vec_all_nge (vector double, vector double);
41134     int vec_all_ngt (vector double, vector double);
41135     int vec_all_nle (vector double, vector double);
41136     int vec_all_nlt (vector double, vector double);
41137     int vec_all_numeric (vector double);
41138     int vec_any_eq (vector double, vector double);
41139     int vec_any_ge (vector double, vector double);
41140     int vec_any_gt (vector double, vector double);
41141     int vec_any_le (vector double, vector double);
41142     int vec_any_lt (vector double, vector double);
41143     int vec_any_nan (vector double);
41144     int vec_any_ne (vector double, vector double);
41145     int vec_any_nge (vector double, vector double);
41146     int vec_any_ngt (vector double, vector double);
41147     int vec_any_nle (vector double, vector double);
41148     int vec_any_nlt (vector double, vector double);
41149     int vec_any_numeric (vector double);
41150
41151     vector double vec_vsx_ld (int, const vector double *);
41152     vector double vec_vsx_ld (int, const double *);
41153     vector float vec_vsx_ld (int, const vector float *);
41154     vector float vec_vsx_ld (int, const float *);
41155     vector bool int vec_vsx_ld (int, const vector bool int *);
41156     vector signed int vec_vsx_ld (int, const vector signed int *);
41157     vector signed int vec_vsx_ld (int, const int *);
41158     vector signed int vec_vsx_ld (int, const long *);
41159     vector unsigned int vec_vsx_ld (int, const vector unsigned int *);
41160     vector unsigned int vec_vsx_ld (int, const unsigned int *);
41161     vector unsigned int vec_vsx_ld (int, const unsigned long *);
41162     vector bool short vec_vsx_ld (int, const vector bool short *);
41163     vector pixel vec_vsx_ld (int, const vector pixel *);
41164     vector signed short vec_vsx_ld (int, const vector signed short *);
41165     vector signed short vec_vsx_ld (int, const short *);
41166     vector unsigned short vec_vsx_ld (int, const vector unsigned short *);
41167     vector unsigned short vec_vsx_ld (int, const unsigned short *);
41168     vector bool char vec_vsx_ld (int, const vector bool char *);
41169     vector signed char vec_vsx_ld (int, const vector signed char *);
41170     vector signed char vec_vsx_ld (int, const signed char *);
41171     vector unsigned char vec_vsx_ld (int, const vector unsigned char *);
41172     vector unsigned char vec_vsx_ld (int, const unsigned char *);
41173
41174     void vec_vsx_st (vector double, int, vector double *);
41175     void vec_vsx_st (vector double, int, double *);
41176     void vec_vsx_st (vector float, int, vector float *);
41177     void vec_vsx_st (vector float, int, float *);
41178     void vec_vsx_st (vector signed int, int, vector signed int *);
41179     void vec_vsx_st (vector signed int, int, int *);
41180     void vec_vsx_st (vector unsigned int, int, vector unsigned int *);
41181     void vec_vsx_st (vector unsigned int, int, unsigned int *);
41182     void vec_vsx_st (vector bool int, int, vector bool int *);
41183     void vec_vsx_st (vector bool int, int, unsigned int *);
41184     void vec_vsx_st (vector bool int, int, int *);
41185     void vec_vsx_st (vector signed short, int, vector signed short *);
41186     void vec_vsx_st (vector signed short, int, short *);
41187     void vec_vsx_st (vector unsigned short, int, vector unsigned short *);
41188     void vec_vsx_st (vector unsigned short, int, unsigned short *);
41189     void vec_vsx_st (vector bool short, int, vector bool short *);
41190     void vec_vsx_st (vector bool short, int, unsigned short *);
41191     void vec_vsx_st (vector pixel, int, vector pixel *);
41192     void vec_vsx_st (vector pixel, int, unsigned short *);
41193     void vec_vsx_st (vector pixel, int, short *);
41194     void vec_vsx_st (vector bool short, int, short *);
41195     void vec_vsx_st (vector signed char, int, vector signed char *);
41196     void vec_vsx_st (vector signed char, int, signed char *);
41197     void vec_vsx_st (vector unsigned char, int, vector unsigned char *);
41198     void vec_vsx_st (vector unsigned char, int, unsigned char *);
41199     void vec_vsx_st (vector bool char, int, vector bool char *);
41200     void vec_vsx_st (vector bool char, int, unsigned char *);
41201     void vec_vsx_st (vector bool char, int, signed char *);
41202
41203     vector double vec_xxpermdi (vector double, vector double, int);
41204     vector float vec_xxpermdi (vector float, vector float, int);
41205     vector long long vec_xxpermdi (vector long long, vector long long, int);
41206     vector unsigned long long vec_xxpermdi (vector unsigned long long,
41207                                             vector unsigned long long, int);
41208     vector int vec_xxpermdi (vector int, vector int, int);
41209     vector unsigned int vec_xxpermdi (vector unsigned int,
41210                                       vector unsigned int, int);
41211     vector short vec_xxpermdi (vector short, vector short, int);
41212     vector unsigned short vec_xxpermdi (vector unsigned short,
41213                                         vector unsigned short, int);
41214     vector signed char vec_xxpermdi (vector signed char, vector signed char, int);
41215     vector unsigned char vec_xxpermdi (vector unsigned char,
41216                                        vector unsigned char, int);
41217
41218     vector double vec_xxsldi (vector double, vector double, int);
41219     vector float vec_xxsldi (vector float, vector float, int);
41220     vector long long vec_xxsldi (vector long long, vector long long, int);
41221     vector unsigned long long vec_xxsldi (vector unsigned long long,
41222                                           vector unsigned long long, int);
41223     vector int vec_xxsldi (vector int, vector int, int);
41224     vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int);
41225     vector short vec_xxsldi (vector short, vector short, int);
41226     vector unsigned short vec_xxsldi (vector unsigned short,
41227                                       vector unsigned short, int);
41228     vector signed char vec_xxsldi (vector signed char, vector signed char, int);
41229     vector unsigned char vec_xxsldi (vector unsigned char,
41230                                      vector unsigned char, int);
41231
41232 Note that the `vec_ld' and `vec_st' built-in functions always generate
41233the AltiVec `LVX' and `STVX' instructions even if the VSX instruction
41234set is available.  The `vec_vsx_ld' and `vec_vsx_st' built-in functions
41235always generate the VSX `LXVD2X', `LXVW4X', `STXVD2X', and `STXVW4X'
41236instructions.
41237
41238 If the ISA 2.07 additions to the vector/scalar (power8-vector)
41239instruction set is available, the following additional functions are
41240available for both 32-bit and 64-bit targets.  For 64-bit targets, you
41241can use VECTOR LONG instead of VECTOR LONG LONG, VECTOR BOOL LONG
41242instead of VECTOR BOOL LONG LONG, and VECTOR UNSIGNED LONG instead of
41243VECTOR UNSIGNED LONG LONG.
41244
41245     vector long long vec_abs (vector long long);
41246
41247     vector long long vec_add (vector long long, vector long long);
41248     vector unsigned long long vec_add (vector unsigned long long,
41249                                        vector unsigned long long);
41250
41251     int vec_all_eq (vector long long, vector long long);
41252     int vec_all_eq (vector unsigned long long, vector unsigned long long);
41253     int vec_all_ge (vector long long, vector long long);
41254     int vec_all_ge (vector unsigned long long, vector unsigned long long);
41255     int vec_all_gt (vector long long, vector long long);
41256     int vec_all_gt (vector unsigned long long, vector unsigned long long);
41257     int vec_all_le (vector long long, vector long long);
41258     int vec_all_le (vector unsigned long long, vector unsigned long long);
41259     int vec_all_lt (vector long long, vector long long);
41260     int vec_all_lt (vector unsigned long long, vector unsigned long long);
41261     int vec_all_ne (vector long long, vector long long);
41262     int vec_all_ne (vector unsigned long long, vector unsigned long long);
41263
41264     int vec_any_eq (vector long long, vector long long);
41265     int vec_any_eq (vector unsigned long long, vector unsigned long long);
41266     int vec_any_ge (vector long long, vector long long);
41267     int vec_any_ge (vector unsigned long long, vector unsigned long long);
41268     int vec_any_gt (vector long long, vector long long);
41269     int vec_any_gt (vector unsigned long long, vector unsigned long long);
41270     int vec_any_le (vector long long, vector long long);
41271     int vec_any_le (vector unsigned long long, vector unsigned long long);
41272     int vec_any_lt (vector long long, vector long long);
41273     int vec_any_lt (vector unsigned long long, vector unsigned long long);
41274     int vec_any_ne (vector long long, vector long long);
41275     int vec_any_ne (vector unsigned long long, vector unsigned long long);
41276
41277     vector long long vec_eqv (vector long long, vector long long);
41278     vector long long vec_eqv (vector bool long long, vector long long);
41279     vector long long vec_eqv (vector long long, vector bool long long);
41280     vector unsigned long long vec_eqv (vector unsigned long long,
41281                                        vector unsigned long long);
41282     vector unsigned long long vec_eqv (vector bool long long,
41283                                        vector unsigned long long);
41284     vector unsigned long long vec_eqv (vector unsigned long long,
41285                                        vector bool long long);
41286     vector int vec_eqv (vector int, vector int);
41287     vector int vec_eqv (vector bool int, vector int);
41288     vector int vec_eqv (vector int, vector bool int);
41289     vector unsigned int vec_eqv (vector unsigned int, vector unsigned int);
41290     vector unsigned int vec_eqv (vector bool unsigned int,
41291                                  vector unsigned int);
41292     vector unsigned int vec_eqv (vector unsigned int,
41293                                  vector bool unsigned int);
41294     vector short vec_eqv (vector short, vector short);
41295     vector short vec_eqv (vector bool short, vector short);
41296     vector short vec_eqv (vector short, vector bool short);
41297     vector unsigned short vec_eqv (vector unsigned short, vector unsigned short);
41298     vector unsigned short vec_eqv (vector bool unsigned short,
41299                                    vector unsigned short);
41300     vector unsigned short vec_eqv (vector unsigned short,
41301                                    vector bool unsigned short);
41302     vector signed char vec_eqv (vector signed char, vector signed char);
41303     vector signed char vec_eqv (vector bool signed char, vector signed char);
41304     vector signed char vec_eqv (vector signed char, vector bool signed char);
41305     vector unsigned char vec_eqv (vector unsigned char, vector unsigned char);
41306     vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char);
41307     vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char);
41308
41309     vector long long vec_max (vector long long, vector long long);
41310     vector unsigned long long vec_max (vector unsigned long long,
41311                                        vector unsigned long long);
41312
41313     vector signed int vec_mergee (vector signed int, vector signed int);
41314     vector unsigned int vec_mergee (vector unsigned int, vector unsigned int);
41315     vector bool int vec_mergee (vector bool int, vector bool int);
41316
41317     vector signed int vec_mergeo (vector signed int, vector signed int);
41318     vector unsigned int vec_mergeo (vector unsigned int, vector unsigned int);
41319     vector bool int vec_mergeo (vector bool int, vector bool int);
41320
41321     vector long long vec_min (vector long long, vector long long);
41322     vector unsigned long long vec_min (vector unsigned long long,
41323                                        vector unsigned long long);
41324
41325     vector long long vec_nand (vector long long, vector long long);
41326     vector long long vec_nand (vector bool long long, vector long long);
41327     vector long long vec_nand (vector long long, vector bool long long);
41328     vector unsigned long long vec_nand (vector unsigned long long,
41329                                         vector unsigned long long);
41330     vector unsigned long long vec_nand (vector bool long long,
41331                                        vector unsigned long long);
41332     vector unsigned long long vec_nand (vector unsigned long long,
41333                                         vector bool long long);
41334     vector int vec_nand (vector int, vector int);
41335     vector int vec_nand (vector bool int, vector int);
41336     vector int vec_nand (vector int, vector bool int);
41337     vector unsigned int vec_nand (vector unsigned int, vector unsigned int);
41338     vector unsigned int vec_nand (vector bool unsigned int,
41339                                   vector unsigned int);
41340     vector unsigned int vec_nand (vector unsigned int,
41341                                   vector bool unsigned int);
41342     vector short vec_nand (vector short, vector short);
41343     vector short vec_nand (vector bool short, vector short);
41344     vector short vec_nand (vector short, vector bool short);
41345     vector unsigned short vec_nand (vector unsigned short, vector unsigned short);
41346     vector unsigned short vec_nand (vector bool unsigned short,
41347                                     vector unsigned short);
41348     vector unsigned short vec_nand (vector unsigned short,
41349                                     vector bool unsigned short);
41350     vector signed char vec_nand (vector signed char, vector signed char);
41351     vector signed char vec_nand (vector bool signed char, vector signed char);
41352     vector signed char vec_nand (vector signed char, vector bool signed char);
41353     vector unsigned char vec_nand (vector unsigned char, vector unsigned char);
41354     vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char);
41355     vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char);
41356
41357     vector long long vec_orc (vector long long, vector long long);
41358     vector long long vec_orc (vector bool long long, vector long long);
41359     vector long long vec_orc (vector long long, vector bool long long);
41360     vector unsigned long long vec_orc (vector unsigned long long,
41361                                        vector unsigned long long);
41362     vector unsigned long long vec_orc (vector bool long long,
41363                                        vector unsigned long long);
41364     vector unsigned long long vec_orc (vector unsigned long long,
41365                                        vector bool long long);
41366     vector int vec_orc (vector int, vector int);
41367     vector int vec_orc (vector bool int, vector int);
41368     vector int vec_orc (vector int, vector bool int);
41369     vector unsigned int vec_orc (vector unsigned int, vector unsigned int);
41370     vector unsigned int vec_orc (vector bool unsigned int,
41371                                  vector unsigned int);
41372     vector unsigned int vec_orc (vector unsigned int,
41373                                  vector bool unsigned int);
41374     vector short vec_orc (vector short, vector short);
41375     vector short vec_orc (vector bool short, vector short);
41376     vector short vec_orc (vector short, vector bool short);
41377     vector unsigned short vec_orc (vector unsigned short, vector unsigned short);
41378     vector unsigned short vec_orc (vector bool unsigned short,
41379                                    vector unsigned short);
41380     vector unsigned short vec_orc (vector unsigned short,
41381                                    vector bool unsigned short);
41382     vector signed char vec_orc (vector signed char, vector signed char);
41383     vector signed char vec_orc (vector bool signed char, vector signed char);
41384     vector signed char vec_orc (vector signed char, vector bool signed char);
41385     vector unsigned char vec_orc (vector unsigned char, vector unsigned char);
41386     vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char);
41387     vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char);
41388
41389     vector int vec_pack (vector long long, vector long long);
41390     vector unsigned int vec_pack (vector unsigned long long,
41391                                   vector unsigned long long);
41392     vector bool int vec_pack (vector bool long long, vector bool long long);
41393
41394     vector int vec_packs (vector long long, vector long long);
41395     vector unsigned int vec_packs (vector unsigned long long,
41396                                    vector unsigned long long);
41397
41398     vector unsigned int vec_packsu (vector long long, vector long long);
41399     vector unsigned int vec_packsu (vector unsigned long long,
41400                                     vector unsigned long long);
41401
41402     vector long long vec_rl (vector long long,
41403                              vector unsigned long long);
41404     vector long long vec_rl (vector unsigned long long,
41405                              vector unsigned long long);
41406
41407     vector long long vec_sl (vector long long, vector unsigned long long);
41408     vector long long vec_sl (vector unsigned long long,
41409                              vector unsigned long long);
41410
41411     vector long long vec_sr (vector long long, vector unsigned long long);
41412     vector unsigned long long char vec_sr (vector unsigned long long,
41413                                            vector unsigned long long);
41414
41415     vector long long vec_sra (vector long long, vector unsigned long long);
41416     vector unsigned long long vec_sra (vector unsigned long long,
41417                                        vector unsigned long long);
41418
41419     vector long long vec_sub (vector long long, vector long long);
41420     vector unsigned long long vec_sub (vector unsigned long long,
41421                                        vector unsigned long long);
41422
41423     vector long long vec_unpackh (vector int);
41424     vector unsigned long long vec_unpackh (vector unsigned int);
41425
41426     vector long long vec_unpackl (vector int);
41427     vector unsigned long long vec_unpackl (vector unsigned int);
41428
41429     vector long long vec_vaddudm (vector long long, vector long long);
41430     vector long long vec_vaddudm (vector bool long long, vector long long);
41431     vector long long vec_vaddudm (vector long long, vector bool long long);
41432     vector unsigned long long vec_vaddudm (vector unsigned long long,
41433                                            vector unsigned long long);
41434     vector unsigned long long vec_vaddudm (vector bool unsigned long long,
41435                                            vector unsigned long long);
41436     vector unsigned long long vec_vaddudm (vector unsigned long long,
41437                                            vector bool unsigned long long);
41438
41439     vector long long vec_vbpermq (vector signed char, vector signed char);
41440     vector long long vec_vbpermq (vector unsigned char, vector unsigned char);
41441
41442     vector long long vec_cntlz (vector long long);
41443     vector unsigned long long vec_cntlz (vector unsigned long long);
41444     vector int vec_cntlz (vector int);
41445     vector unsigned int vec_cntlz (vector int);
41446     vector short vec_cntlz (vector short);
41447     vector unsigned short vec_cntlz (vector unsigned short);
41448     vector signed char vec_cntlz (vector signed char);
41449     vector unsigned char vec_cntlz (vector unsigned char);
41450
41451     vector long long vec_vclz (vector long long);
41452     vector unsigned long long vec_vclz (vector unsigned long long);
41453     vector int vec_vclz (vector int);
41454     vector unsigned int vec_vclz (vector int);
41455     vector short vec_vclz (vector short);
41456     vector unsigned short vec_vclz (vector unsigned short);
41457     vector signed char vec_vclz (vector signed char);
41458     vector unsigned char vec_vclz (vector unsigned char);
41459
41460     vector signed char vec_vclzb (vector signed char);
41461     vector unsigned char vec_vclzb (vector unsigned char);
41462
41463     vector long long vec_vclzd (vector long long);
41464     vector unsigned long long vec_vclzd (vector unsigned long long);
41465
41466     vector short vec_vclzh (vector short);
41467     vector unsigned short vec_vclzh (vector unsigned short);
41468
41469     vector int vec_vclzw (vector int);
41470     vector unsigned int vec_vclzw (vector int);
41471
41472     vector signed char vec_vgbbd (vector signed char);
41473     vector unsigned char vec_vgbbd (vector unsigned char);
41474
41475     vector long long vec_vmaxsd (vector long long, vector long long);
41476
41477     vector unsigned long long vec_vmaxud (vector unsigned long long,
41478                                           unsigned vector long long);
41479
41480     vector long long vec_vminsd (vector long long, vector long long);
41481
41482     vector unsigned long long vec_vminud (vector long long,
41483                                           vector long long);
41484
41485     vector int vec_vpksdss (vector long long, vector long long);
41486     vector unsigned int vec_vpksdss (vector long long, vector long long);
41487
41488     vector unsigned int vec_vpkudus (vector unsigned long long,
41489                                      vector unsigned long long);
41490
41491     vector int vec_vpkudum (vector long long, vector long long);
41492     vector unsigned int vec_vpkudum (vector unsigned long long,
41493                                      vector unsigned long long);
41494     vector bool int vec_vpkudum (vector bool long long, vector bool long long);
41495
41496     vector long long vec_vpopcnt (vector long long);
41497     vector unsigned long long vec_vpopcnt (vector unsigned long long);
41498     vector int vec_vpopcnt (vector int);
41499     vector unsigned int vec_vpopcnt (vector int);
41500     vector short vec_vpopcnt (vector short);
41501     vector unsigned short vec_vpopcnt (vector unsigned short);
41502     vector signed char vec_vpopcnt (vector signed char);
41503     vector unsigned char vec_vpopcnt (vector unsigned char);
41504
41505     vector signed char vec_vpopcntb (vector signed char);
41506     vector unsigned char vec_vpopcntb (vector unsigned char);
41507
41508     vector long long vec_vpopcntd (vector long long);
41509     vector unsigned long long vec_vpopcntd (vector unsigned long long);
41510
41511     vector short vec_vpopcnth (vector short);
41512     vector unsigned short vec_vpopcnth (vector unsigned short);
41513
41514     vector int vec_vpopcntw (vector int);
41515     vector unsigned int vec_vpopcntw (vector int);
41516
41517     vector long long vec_vrld (vector long long, vector unsigned long long);
41518     vector unsigned long long vec_vrld (vector unsigned long long,
41519                                         vector unsigned long long);
41520
41521     vector long long vec_vsld (vector long long, vector unsigned long long);
41522     vector long long vec_vsld (vector unsigned long long,
41523                                vector unsigned long long);
41524
41525     vector long long vec_vsrad (vector long long, vector unsigned long long);
41526     vector unsigned long long vec_vsrad (vector unsigned long long,
41527                                          vector unsigned long long);
41528
41529     vector long long vec_vsrd (vector long long, vector unsigned long long);
41530     vector unsigned long long char vec_vsrd (vector unsigned long long,
41531                                              vector unsigned long long);
41532
41533     vector long long vec_vsubudm (vector long long, vector long long);
41534     vector long long vec_vsubudm (vector bool long long, vector long long);
41535     vector long long vec_vsubudm (vector long long, vector bool long long);
41536     vector unsigned long long vec_vsubudm (vector unsigned long long,
41537                                            vector unsigned long long);
41538     vector unsigned long long vec_vsubudm (vector bool long long,
41539                                            vector unsigned long long);
41540     vector unsigned long long vec_vsubudm (vector unsigned long long,
41541                                            vector bool long long);
41542
41543     vector long long vec_vupkhsw (vector int);
41544     vector unsigned long long vec_vupkhsw (vector unsigned int);
41545
41546     vector long long vec_vupklsw (vector int);
41547     vector unsigned long long vec_vupklsw (vector int);
41548
41549 If the ISA 2.07 additions to the vector/scalar (power8-vector)
41550instruction set is available, the following additional functions are
41551available for 64-bit targets.  New vector types (VECTOR __INT128_T and
41552VECTOR __UINT128_T) are available to hold the __INT128_T and
41553__UINT128_T types to use these builtins.
41554
41555 The normal vector extract, and set operations work on VECTOR
41556__INT128_T and VECTOR __UINT128_T types, but the index value must be 0.
41557
41558     vector __int128_t vec_vaddcuq (vector __int128_t, vector __int128_t);
41559     vector __uint128_t vec_vaddcuq (vector __uint128_t, vector __uint128_t);
41560
41561     vector __int128_t vec_vadduqm (vector __int128_t, vector __int128_t);
41562     vector __uint128_t vec_vadduqm (vector __uint128_t, vector __uint128_t);
41563
41564     vector __int128_t vec_vaddecuq (vector __int128_t, vector __int128_t,
41565                                     vector __int128_t);
41566     vector __uint128_t vec_vaddecuq (vector __uint128_t, vector __uint128_t,
41567                                      vector __uint128_t);
41568
41569     vector __int128_t vec_vaddeuqm (vector __int128_t, vector __int128_t,
41570                                     vector __int128_t);
41571     vector __uint128_t vec_vaddeuqm (vector __uint128_t, vector __uint128_t,
41572                                      vector __uint128_t);
41573
41574     vector __int128_t vec_vsubecuq (vector __int128_t, vector __int128_t,
41575                                     vector __int128_t);
41576     vector __uint128_t vec_vsubecuq (vector __uint128_t, vector __uint128_t,
41577                                      vector __uint128_t);
41578
41579     vector __int128_t vec_vsubeuqm (vector __int128_t, vector __int128_t,
41580                                     vector __int128_t);
41581     vector __uint128_t vec_vsubeuqm (vector __uint128_t, vector __uint128_t,
41582                                      vector __uint128_t);
41583
41584     vector __int128_t vec_vsubcuq (vector __int128_t, vector __int128_t);
41585     vector __uint128_t vec_vsubcuq (vector __uint128_t, vector __uint128_t);
41586
41587     __int128_t vec_vsubuqm (__int128_t, __int128_t);
41588     __uint128_t vec_vsubuqm (__uint128_t, __uint128_t);
41589
41590     vector __int128_t __builtin_bcdadd (vector __int128_t, vector__int128_t);
41591     int __builtin_bcdadd_lt (vector __int128_t, vector__int128_t);
41592     int __builtin_bcdadd_eq (vector __int128_t, vector__int128_t);
41593     int __builtin_bcdadd_gt (vector __int128_t, vector__int128_t);
41594     int __builtin_bcdadd_ov (vector __int128_t, vector__int128_t);
41595     vector __int128_t bcdsub (vector __int128_t, vector__int128_t);
41596     int __builtin_bcdsub_lt (vector __int128_t, vector__int128_t);
41597     int __builtin_bcdsub_eq (vector __int128_t, vector__int128_t);
41598     int __builtin_bcdsub_gt (vector __int128_t, vector__int128_t);
41599     int __builtin_bcdsub_ov (vector __int128_t, vector__int128_t);
41600
41601 If the cryptographic instructions are enabled (`-mcrypto' or
41602`-mcpu=power8'), the following builtins are enabled.
41603
41604     vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long);
41605
41606     vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long,
41607                                                         vector unsigned long long);
41608
41609     vector unsigned long long __builtin_crypto_vcipherlast
41610                                          (vector unsigned long long,
41611                                           vector unsigned long long);
41612
41613     vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long,
41614                                                          vector unsigned long long);
41615
41616     vector unsigned long long __builtin_crypto_vncipherlast
41617                                          (vector unsigned long long,
41618                                           vector unsigned long long);
41619
41620     vector unsigned char __builtin_crypto_vpermxor (vector unsigned char,
41621                                                     vector unsigned char,
41622                                                     vector unsigned char);
41623
41624     vector unsigned short __builtin_crypto_vpermxor (vector unsigned short,
41625                                                      vector unsigned short,
41626                                                      vector unsigned short);
41627
41628     vector unsigned int __builtin_crypto_vpermxor (vector unsigned int,
41629                                                    vector unsigned int,
41630                                                    vector unsigned int);
41631
41632     vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long,
41633                                                          vector unsigned long long,
41634                                                          vector unsigned long long);
41635
41636     vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char,
41637                                                    vector unsigned char);
41638
41639     vector unsigned short __builtin_crypto_vpmsumb (vector unsigned short,
41640                                                     vector unsigned short);
41641
41642     vector unsigned int __builtin_crypto_vpmsumb (vector unsigned int,
41643                                                   vector unsigned int);
41644
41645     vector unsigned long long __builtin_crypto_vpmsumb (vector unsigned long long,
41646                                                         vector unsigned long long);
41647
41648     vector unsigned long long __builtin_crypto_vshasigmad
41649                                    (vector unsigned long long, int, int);
41650
41651     vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int,
41652                                                      int, int);
41653
41654 The second argument to the __BUILTIN_CRYPTO_VSHASIGMAD and
41655__BUILTIN_CRYPTO_VSHASIGMAW builtin functions must be a constant
41656integer that is 0 or 1.  The third argument to these builtin functions
41657must be a constant integer in the range of 0 to 15.
41658
41659
41660File: gcc.info,  Node: PowerPC Hardware Transactional Memory Built-in Functions,  Next: RX Built-in Functions,  Prev: PowerPC AltiVec/VSX Built-in Functions,  Up: Target Builtins
41661
416626.56.16 PowerPC Hardware Transactional Memory Built-in Functions
41663----------------------------------------------------------------
41664
41665GCC provides two interfaces for accessing the Hardware Transactional
41666Memory (HTM) instructions available on some of the PowerPC family of
41667prcoessors (eg, POWER8).  The two interfaces come in a low level
41668interface, consisting of built-in functions specific to PowerPC and a
41669higher level interface consisting of inline functions that are common
41670between PowerPC and S/390.
41671
416726.56.16.1 PowerPC HTM Low Level Built-in Functions
41673..................................................
41674
41675The following low level built-in functions are available with `-mhtm'
41676or `-mcpu=CPU' where CPU is `power8' or later.  They all generate the
41677machine instruction that is part of the name.
41678
41679 The HTM builtins (with the exception of `__builtin_tbegin') return the
41680full 4-bit condition register value set by their associated hardware
41681instruction.  The header file `htmintrin.h' defines some macros that can
41682be used to decipher the return value.  The `__builtin_tbegin' builtin
41683returns a simple true or false value depending on whether a transaction
41684was successfully started or not.  The arguments of the builtins match
41685exactly the type and order of the associated hardware instruction's
41686operands, except for the `__builtin_tcheck' builtin, which does not
41687take any input arguments.  Refer to the ISA manual for a description of
41688each instruction's operands.
41689
41690     unsigned int __builtin_tbegin (unsigned int)
41691     unsigned int __builtin_tend (unsigned int)
41692
41693     unsigned int __builtin_tabort (unsigned int)
41694     unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int)
41695     unsigned int __builtin_tabortdci (unsigned int, unsigned int, int)
41696     unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int)
41697     unsigned int __builtin_tabortwci (unsigned int, unsigned int, int)
41698
41699     unsigned int __builtin_tcheck (void)
41700     unsigned int __builtin_treclaim (unsigned int)
41701     unsigned int __builtin_trechkpt (void)
41702     unsigned int __builtin_tsr (unsigned int)
41703
41704 In addition to the above HTM built-ins, we have added built-ins for
41705some common extended mnemonics of the HTM instructions:
41706
41707     unsigned int __builtin_tendall (void)
41708     unsigned int __builtin_tresume (void)
41709     unsigned int __builtin_tsuspend (void)
41710
41711 The following set of built-in functions are available to gain access
41712to the HTM specific special purpose registers.
41713
41714     unsigned long __builtin_get_texasr (void)
41715     unsigned long __builtin_get_texasru (void)
41716     unsigned long __builtin_get_tfhar (void)
41717     unsigned long __builtin_get_tfiar (void)
41718
41719     void __builtin_set_texasr (unsigned long);
41720     void __builtin_set_texasru (unsigned long);
41721     void __builtin_set_tfhar (unsigned long);
41722     void __builtin_set_tfiar (unsigned long);
41723
41724 Example usage of these low level built-in functions may look like:
41725
41726     #include <htmintrin.h>
41727
41728     int num_retries = 10;
41729
41730     while (1)
41731       {
41732         if (__builtin_tbegin (0))
41733           {
41734             /* Transaction State Initiated.  */
41735             if (is_locked (lock))
41736               __builtin_tabort (0);
41737             ... transaction code...
41738             __builtin_tend (0);
41739             break;
41740           }
41741         else
41742           {
41743             /* Transaction State Failed.  Use locks if the transaction
41744                failure is "persistent" or we've tried too many times.  */
41745             if (num_retries-- <= 0
41746                 || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ()))
41747               {
41748                 acquire_lock (lock);
41749                 ... non transactional fallback path...
41750                 release_lock (lock);
41751                 break;
41752               }
41753           }
41754       }
41755
41756 One final built-in function has been added that returns the value of
41757the 2-bit Transaction State field of the Machine Status Register (MSR)
41758as stored in `CR0'.
41759
41760     unsigned long __builtin_ttest (void)
41761
41762 This built-in can be used to determine the current transaction state
41763using the following code example:
41764
41765     #include <htmintrin.h>
41766
41767     unsigned char tx_state = _HTM_STATE (__builtin_ttest ());
41768
41769     if (tx_state == _HTM_TRANSACTIONAL)
41770       {
41771         /* Code to use in transactional state.  */
41772       }
41773     else if (tx_state == _HTM_NONTRANSACTIONAL)
41774       {
41775         /* Code to use in non-transactional state.  */
41776       }
41777     else if (tx_state == _HTM_SUSPENDED)
41778       {
41779         /* Code to use in transaction suspended state.  */
41780       }
41781
417826.56.16.2 PowerPC HTM High Level Inline Functions
41783.................................................
41784
41785The following high level HTM interface is made available by including
41786`<htmxlintrin.h>' and using `-mhtm' or `-mcpu=CPU' where CPU is
41787`power8' or later.  This interface is common between PowerPC and S/390,
41788allowing users to write one HTM source implementation that can be
41789compiled and executed on either system.
41790
41791     long __TM_simple_begin (void)
41792     long __TM_begin (void* const TM_buff)
41793     long __TM_end (void)
41794     void __TM_abort (void)
41795     void __TM_named_abort (unsigned char const code)
41796     void __TM_resume (void)
41797     void __TM_suspend (void)
41798
41799     long __TM_is_user_abort (void* const TM_buff)
41800     long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code)
41801     long __TM_is_illegal (void* const TM_buff)
41802     long __TM_is_footprint_exceeded (void* const TM_buff)
41803     long __TM_nesting_depth (void* const TM_buff)
41804     long __TM_is_nested_too_deep(void* const TM_buff)
41805     long __TM_is_conflict(void* const TM_buff)
41806     long __TM_is_failure_persistent(void* const TM_buff)
41807     long __TM_failure_address(void* const TM_buff)
41808     long long __TM_failure_code(void* const TM_buff)
41809
41810 Using these common set of HTM inline functions, we can create a more
41811portable version of the HTM example in the previous section that will
41812work on either PowerPC or S/390:
41813
41814     #include <htmxlintrin.h>
41815
41816     int num_retries = 10;
41817     TM_buff_type TM_buff;
41818
41819     while (1)
41820       {
41821         if (__TM_begin (TM_buff) == _HTM_TBEGIN_STARTED)
41822           {
41823             /* Transaction State Initiated.  */
41824             if (is_locked (lock))
41825               __TM_abort ();
41826             ... transaction code...
41827             __TM_end ();
41828             break;
41829           }
41830         else
41831           {
41832             /* Transaction State Failed.  Use locks if the transaction
41833                failure is "persistent" or we've tried too many times.  */
41834             if (num_retries-- <= 0
41835                 || __TM_is_failure_persistent (TM_buff))
41836               {
41837                 acquire_lock (lock);
41838                 ... non transactional fallback path...
41839                 release_lock (lock);
41840                 break;
41841               }
41842           }
41843       }
41844
41845
41846File: gcc.info,  Node: RX Built-in Functions,  Next: S/390 System z Built-in Functions,  Prev: PowerPC Hardware Transactional Memory Built-in Functions,  Up: Target Builtins
41847
418486.56.17 RX Built-in Functions
41849-----------------------------
41850
41851GCC supports some of the RX instructions which cannot be expressed in
41852the C programming language via the use of built-in functions.  The
41853following functions are supported:
41854
41855 -- Built-in Function: void __builtin_rx_brk (void)
41856     Generates the `brk' machine instruction.
41857
41858 -- Built-in Function: void __builtin_rx_clrpsw (int)
41859     Generates the `clrpsw' machine instruction to clear the specified
41860     bit in the processor status word.
41861
41862 -- Built-in Function: void __builtin_rx_int (int)
41863     Generates the `int' machine instruction to generate an interrupt
41864     with the specified value.
41865
41866 -- Built-in Function: void __builtin_rx_machi (int, int)
41867     Generates the `machi' machine instruction to add the result of
41868     multiplying the top 16 bits of the two arguments into the
41869     accumulator.
41870
41871 -- Built-in Function: void __builtin_rx_maclo (int, int)
41872     Generates the `maclo' machine instruction to add the result of
41873     multiplying the bottom 16 bits of the two arguments into the
41874     accumulator.
41875
41876 -- Built-in Function: void __builtin_rx_mulhi (int, int)
41877     Generates the `mulhi' machine instruction to place the result of
41878     multiplying the top 16 bits of the two arguments into the
41879     accumulator.
41880
41881 -- Built-in Function: void __builtin_rx_mullo (int, int)
41882     Generates the `mullo' machine instruction to place the result of
41883     multiplying the bottom 16 bits of the two arguments into the
41884     accumulator.
41885
41886 -- Built-in Function: int __builtin_rx_mvfachi (void)
41887     Generates the `mvfachi' machine instruction to read the top 32
41888     bits of the accumulator.
41889
41890 -- Built-in Function: int __builtin_rx_mvfacmi (void)
41891     Generates the `mvfacmi' machine instruction to read the middle 32
41892     bits of the accumulator.
41893
41894 -- Built-in Function: int __builtin_rx_mvfc (int)
41895     Generates the `mvfc' machine instruction which reads the control
41896     register specified in its argument and returns its value.
41897
41898 -- Built-in Function: void __builtin_rx_mvtachi (int)
41899     Generates the `mvtachi' machine instruction to set the top 32 bits
41900     of the accumulator.
41901
41902 -- Built-in Function: void __builtin_rx_mvtaclo (int)
41903     Generates the `mvtaclo' machine instruction to set the bottom 32
41904     bits of the accumulator.
41905
41906 -- Built-in Function: void __builtin_rx_mvtc (int reg, int val)
41907     Generates the `mvtc' machine instruction which sets control
41908     register number `reg' to `val'.
41909
41910 -- Built-in Function: void __builtin_rx_mvtipl (int)
41911     Generates the `mvtipl' machine instruction set the interrupt
41912     priority level.
41913
41914 -- Built-in Function: void __builtin_rx_racw (int)
41915     Generates the `racw' machine instruction to round the accumulator
41916     according to the specified mode.
41917
41918 -- Built-in Function: int __builtin_rx_revw (int)
41919     Generates the `revw' machine instruction which swaps the bytes in
41920     the argument so that bits 0-7 now occupy bits 8-15 and vice versa,
41921     and also bits 16-23 occupy bits 24-31 and vice versa.
41922
41923 -- Built-in Function: void __builtin_rx_rmpa (void)
41924     Generates the `rmpa' machine instruction which initiates a
41925     repeated multiply and accumulate sequence.
41926
41927 -- Built-in Function: void __builtin_rx_round (float)
41928     Generates the `round' machine instruction which returns the
41929     floating-point argument rounded according to the current rounding
41930     mode set in the floating-point status word register.
41931
41932 -- Built-in Function: int __builtin_rx_sat (int)
41933     Generates the `sat' machine instruction which returns the
41934     saturated value of the argument.
41935
41936 -- Built-in Function: void __builtin_rx_setpsw (int)
41937     Generates the `setpsw' machine instruction to set the specified
41938     bit in the processor status word.
41939
41940 -- Built-in Function: void __builtin_rx_wait (void)
41941     Generates the `wait' machine instruction.
41942
41943
41944File: gcc.info,  Node: S/390 System z Built-in Functions,  Next: SH Built-in Functions,  Prev: RX Built-in Functions,  Up: Target Builtins
41945
419466.56.18 S/390 System z Built-in Functions
41947-----------------------------------------
41948
41949 -- Built-in Function: int __builtin_tbegin (void*)
41950     Generates the `tbegin' machine instruction starting a
41951     non-constraint hardware transaction.  If the parameter is non-NULL
41952     the memory area is used to store the transaction diagnostic buffer
41953     and will be passed as first operand to `tbegin'.  This buffer can
41954     be defined using the `struct __htm_tdb' C struct defined in
41955     `htmintrin.h' and must reside on a double-word boundary.  The
41956     second tbegin operand is set to `0xff0c'. This enables
41957     save/restore of all GPRs and disables aborts for FPR and AR
41958     manipulations inside the transaction body.  The condition code set
41959     by the tbegin instruction is returned as integer value.  The tbegin
41960     instruction by definition overwrites the content of all FPRs.  The
41961     compiler will generate code which saves and restores the FPRs.  For
41962     soft-float code it is recommended to used the `*_nofloat' variant.
41963     In order to prevent a TDB from being written it is required to
41964     pass an constant zero value as parameter.  Passing the zero value
41965     through a variable is not sufficient.  Although modifications of
41966     access registers inside the transaction will not trigger an
41967     transaction abort it is not supported to actually modify them.
41968     Access registers do not get saved when entering a transaction.
41969     They will have undefined state when reaching the abort code.
41970
41971 Macros for the possible return codes of tbegin are defined in the
41972`htmintrin.h' header file:
41973
41974`_HTM_TBEGIN_STARTED'
41975     `tbegin' has been executed as part of normal processing.  The
41976     transaction body is supposed to be executed.
41977
41978`_HTM_TBEGIN_INDETERMINATE'
41979     The transaction was aborted due to an indeterminate condition which
41980     might be persistent.
41981
41982`_HTM_TBEGIN_TRANSIENT'
41983     The transaction aborted due to a transient failure.  The
41984     transaction should be re-executed in that case.
41985
41986`_HTM_TBEGIN_PERSISTENT'
41987     The transaction aborted due to a persistent failure.  Re-execution
41988     under same circumstances will not be productive.
41989
41990 -- Macro: _HTM_FIRST_USER_ABORT_CODE
41991     The `_HTM_FIRST_USER_ABORT_CODE' defined in `htmintrin.h'
41992     specifies the first abort code which can be used for
41993     `__builtin_tabort'.  Values below this threshold are reserved for
41994     machine use.
41995
41996 -- Data type: struct __htm_tdb
41997     The `struct __htm_tdb' defined in `htmintrin.h' describes the
41998     structure of the transaction diagnostic block as specified in the
41999     Principles of Operation manual chapter 5-91.
42000
42001 -- Built-in Function: int __builtin_tbegin_nofloat (void*)
42002     Same as `__builtin_tbegin' but without FPR saves and restores.
42003     Using this variant in code making use of FPRs will leave the FPRs
42004     in undefined state when entering the transaction abort handler
42005     code.
42006
42007 -- Built-in Function: int __builtin_tbegin_retry (void*, int)
42008     In addition to `__builtin_tbegin' a loop for transient failures is
42009     generated.  If tbegin returns a condition code of 2 the transaction
42010     will be retried as often as specified in the second argument.  The
42011     perform processor assist instruction is used to tell the CPU about
42012     the number of fails so far.
42013
42014 -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int)
42015     Same as `__builtin_tbegin_retry' but without FPR saves and
42016     restores.  Using this variant in code making use of FPRs will leave
42017     the FPRs in undefined state when entering the transaction abort
42018     handler code.
42019
42020 -- Built-in Function: void __builtin_tbeginc (void)
42021     Generates the `tbeginc' machine instruction starting a constraint
42022     hardware transaction.  The second operand is set to `0xff08'.
42023
42024 -- Built-in Function: int __builtin_tend (void)
42025     Generates the `tend' machine instruction finishing a transaction
42026     and making the changes visible to other threads.  The condition
42027     code generated by tend is returned as integer value.
42028
42029 -- Built-in Function: void __builtin_tabort (int)
42030     Generates the `tabort' machine instruction with the specified
42031     abort code.  Abort codes from 0 through 255 are reserved and will
42032     result in an error message.
42033
42034 -- Built-in Function: void __builtin_tx_assist (int)
42035     Generates the `ppa rX,rY,1' machine instruction.  Where the
42036     integer parameter is loaded into rX and a value of zero is loaded
42037     into rY.  The integer parameter specifies the number of times the
42038     transaction repeatedly aborted.
42039
42040 -- Built-in Function: int __builtin_tx_nesting_depth (void)
42041     Generates the `etnd' machine instruction.  The current nesting
42042     depth is returned as integer value.  For a nesting depth of 0 the
42043     code is not executed as part of an transaction.
42044
42045 -- Built-in Function: void __builtin_non_tx_store (uint64_t *,
42046          uint64_t)
42047     Generates the `ntstg' machine instruction.  The second argument is
42048     written to the first arguments location.  The store operation will
42049     not be rolled-back in case of an transaction abort.
42050
42051
42052File: gcc.info,  Node: SH Built-in Functions,  Next: SPARC VIS Built-in Functions,  Prev: S/390 System z Built-in Functions,  Up: Target Builtins
42053
420546.56.19 SH Built-in Functions
42055-----------------------------
42056
42057The following built-in functions are supported on the SH1, SH2, SH3 and
42058SH4 families of processors:
42059
42060 -- Built-in Function: void __builtin_set_thread_pointer (void *PTR)
42061     Sets the `GBR' register to the specified value PTR.  This is
42062     usually used by system code that manages threads and execution
42063     contexts.  The compiler normally does not generate code that
42064     modifies the contents of `GBR' and thus the value is preserved
42065     across function calls.  Changing the `GBR' value in user code must
42066     be done with caution, since the compiler might use `GBR' in order
42067     to access thread local variables.
42068
42069
42070 -- Built-in Function: void * __builtin_thread_pointer (void)
42071     Returns the value that is currently set in the `GBR' register.
42072     Memory loads and stores that use the thread pointer as a base
42073     address are turned into `GBR' based displacement loads and stores,
42074     if possible.  For example:
42075          struct my_tcb
42076          {
42077             int a, b, c, d, e;
42078          };
42079
42080          int get_tcb_value (void)
42081          {
42082            // Generate `mov.l @(8,gbr),r0' instruction
42083            return ((my_tcb*)__builtin_thread_pointer ())->c;
42084          }
42085
42086
42087File: gcc.info,  Node: SPARC VIS Built-in Functions,  Next: SPU Built-in Functions,  Prev: SH Built-in Functions,  Up: Target Builtins
42088
420896.56.20 SPARC VIS Built-in Functions
42090------------------------------------
42091
42092GCC supports SIMD operations on the SPARC using both the generic vector
42093extensions (*note Vector Extensions::) as well as built-in functions for
42094the SPARC Visual Instruction Set (VIS).  When you use the `-mvis'
42095switch, the VIS extension is exposed as the following built-in
42096functions:
42097
42098     typedef int v1si __attribute__ ((vector_size (4)));
42099     typedef int v2si __attribute__ ((vector_size (8)));
42100     typedef short v4hi __attribute__ ((vector_size (8)));
42101     typedef short v2hi __attribute__ ((vector_size (4)));
42102     typedef unsigned char v8qi __attribute__ ((vector_size (8)));
42103     typedef unsigned char v4qi __attribute__ ((vector_size (4)));
42104
42105     void __builtin_vis_write_gsr (int64_t);
42106     int64_t __builtin_vis_read_gsr (void);
42107
42108     void * __builtin_vis_alignaddr (void *, long);
42109     void * __builtin_vis_alignaddrl (void *, long);
42110     int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
42111     v2si __builtin_vis_faligndatav2si (v2si, v2si);
42112     v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
42113     v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
42114
42115     v4hi __builtin_vis_fexpand (v4qi);
42116
42117     v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
42118     v4hi __builtin_vis_fmul8x16au (v4qi, v2hi);
42119     v4hi __builtin_vis_fmul8x16al (v4qi, v2hi);
42120     v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
42121     v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
42122     v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
42123     v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
42124
42125     v4qi __builtin_vis_fpack16 (v4hi);
42126     v8qi __builtin_vis_fpack32 (v2si, v8qi);
42127     v2hi __builtin_vis_fpackfix (v2si);
42128     v8qi __builtin_vis_fpmerge (v4qi, v4qi);
42129
42130     int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
42131
42132     long __builtin_vis_edge8 (void *, void *);
42133     long __builtin_vis_edge8l (void *, void *);
42134     long __builtin_vis_edge16 (void *, void *);
42135     long __builtin_vis_edge16l (void *, void *);
42136     long __builtin_vis_edge32 (void *, void *);
42137     long __builtin_vis_edge32l (void *, void *);
42138
42139     long __builtin_vis_fcmple16 (v4hi, v4hi);
42140     long __builtin_vis_fcmple32 (v2si, v2si);
42141     long __builtin_vis_fcmpne16 (v4hi, v4hi);
42142     long __builtin_vis_fcmpne32 (v2si, v2si);
42143     long __builtin_vis_fcmpgt16 (v4hi, v4hi);
42144     long __builtin_vis_fcmpgt32 (v2si, v2si);
42145     long __builtin_vis_fcmpeq16 (v4hi, v4hi);
42146     long __builtin_vis_fcmpeq32 (v2si, v2si);
42147
42148     v4hi __builtin_vis_fpadd16 (v4hi, v4hi);
42149     v2hi __builtin_vis_fpadd16s (v2hi, v2hi);
42150     v2si __builtin_vis_fpadd32 (v2si, v2si);
42151     v1si __builtin_vis_fpadd32s (v1si, v1si);
42152     v4hi __builtin_vis_fpsub16 (v4hi, v4hi);
42153     v2hi __builtin_vis_fpsub16s (v2hi, v2hi);
42154     v2si __builtin_vis_fpsub32 (v2si, v2si);
42155     v1si __builtin_vis_fpsub32s (v1si, v1si);
42156
42157     long __builtin_vis_array8 (long, long);
42158     long __builtin_vis_array16 (long, long);
42159     long __builtin_vis_array32 (long, long);
42160
42161 When you use the `-mvis2' switch, the VIS version 2.0 built-in
42162functions also become available:
42163
42164     long __builtin_vis_bmask (long, long);
42165     int64_t __builtin_vis_bshuffledi (int64_t, int64_t);
42166     v2si __builtin_vis_bshufflev2si (v2si, v2si);
42167     v4hi __builtin_vis_bshufflev2si (v4hi, v4hi);
42168     v8qi __builtin_vis_bshufflev2si (v8qi, v8qi);
42169
42170     long __builtin_vis_edge8n (void *, void *);
42171     long __builtin_vis_edge8ln (void *, void *);
42172     long __builtin_vis_edge16n (void *, void *);
42173     long __builtin_vis_edge16ln (void *, void *);
42174     long __builtin_vis_edge32n (void *, void *);
42175     long __builtin_vis_edge32ln (void *, void *);
42176
42177 When you use the `-mvis3' switch, the VIS version 3.0 built-in
42178functions also become available:
42179
42180     void __builtin_vis_cmask8 (long);
42181     void __builtin_vis_cmask16 (long);
42182     void __builtin_vis_cmask32 (long);
42183
42184     v4hi __builtin_vis_fchksm16 (v4hi, v4hi);
42185
42186     v4hi __builtin_vis_fsll16 (v4hi, v4hi);
42187     v4hi __builtin_vis_fslas16 (v4hi, v4hi);
42188     v4hi __builtin_vis_fsrl16 (v4hi, v4hi);
42189     v4hi __builtin_vis_fsra16 (v4hi, v4hi);
42190     v2si __builtin_vis_fsll16 (v2si, v2si);
42191     v2si __builtin_vis_fslas16 (v2si, v2si);
42192     v2si __builtin_vis_fsrl16 (v2si, v2si);
42193     v2si __builtin_vis_fsra16 (v2si, v2si);
42194
42195     long __builtin_vis_pdistn (v8qi, v8qi);
42196
42197     v4hi __builtin_vis_fmean16 (v4hi, v4hi);
42198
42199     int64_t __builtin_vis_fpadd64 (int64_t, int64_t);
42200     int64_t __builtin_vis_fpsub64 (int64_t, int64_t);
42201
42202     v4hi __builtin_vis_fpadds16 (v4hi, v4hi);
42203     v2hi __builtin_vis_fpadds16s (v2hi, v2hi);
42204     v4hi __builtin_vis_fpsubs16 (v4hi, v4hi);
42205     v2hi __builtin_vis_fpsubs16s (v2hi, v2hi);
42206     v2si __builtin_vis_fpadds32 (v2si, v2si);
42207     v1si __builtin_vis_fpadds32s (v1si, v1si);
42208     v2si __builtin_vis_fpsubs32 (v2si, v2si);
42209     v1si __builtin_vis_fpsubs32s (v1si, v1si);
42210
42211     long __builtin_vis_fucmple8 (v8qi, v8qi);
42212     long __builtin_vis_fucmpne8 (v8qi, v8qi);
42213     long __builtin_vis_fucmpgt8 (v8qi, v8qi);
42214     long __builtin_vis_fucmpeq8 (v8qi, v8qi);
42215
42216     float __builtin_vis_fhadds (float, float);
42217     double __builtin_vis_fhaddd (double, double);
42218     float __builtin_vis_fhsubs (float, float);
42219     double __builtin_vis_fhsubd (double, double);
42220     float __builtin_vis_fnhadds (float, float);
42221     double __builtin_vis_fnhaddd (double, double);
42222
42223     int64_t __builtin_vis_umulxhi (int64_t, int64_t);
42224     int64_t __builtin_vis_xmulx (int64_t, int64_t);
42225     int64_t __builtin_vis_xmulxhi (int64_t, int64_t);
42226
42227
42228File: gcc.info,  Node: SPU Built-in Functions,  Next: TI C6X Built-in Functions,  Prev: SPARC VIS Built-in Functions,  Up: Target Builtins
42229
422306.56.21 SPU Built-in Functions
42231------------------------------
42232
42233GCC provides extensions for the SPU processor as described in the
42234Sony/Toshiba/IBM SPU Language Extensions Specification, which can be
42235found at `http://cell.scei.co.jp/' or
42236`http://www.ibm.com/developerworks/power/cell/'.  GCC's implementation
42237differs in several ways.
42238
42239   * The optional extension of specifying vector constants in
42240     parentheses is not supported.
42241
42242   * A vector initializer requires no cast if the vector constant is of
42243     the same type as the variable it is initializing.
42244
42245   * If `signed' or `unsigned' is omitted, the signedness of the vector
42246     type is the default signedness of the base type.  The default
42247     varies depending on the operating system, so a portable program
42248     should always specify the signedness.
42249
42250   * By default, the keyword `__vector' is added. The macro `vector' is
42251     defined in `<spu_intrinsics.h>' and can be undefined.
42252
42253   * GCC allows using a `typedef' name as the type specifier for a
42254     vector type.
42255
42256   * For C, overloaded functions are implemented with macros so the
42257     following does not work:
42258
42259            spu_add ((vector signed int){1, 2, 3, 4}, foo);
42260
42261     Since `spu_add' is a macro, the vector constant in the example is
42262     treated as four separate arguments.  Wrap the entire argument in
42263     parentheses for this to work.
42264
42265   * The extended version of `__builtin_expect' is not supported.
42266
42267
42268 _Note:_ Only the interface described in the aforementioned
42269specification is supported. Internally, GCC uses built-in functions to
42270implement the required functionality, but these are not supported and
42271are subject to change without notice.
42272
42273
42274File: gcc.info,  Node: TI C6X Built-in Functions,  Next: TILE-Gx Built-in Functions,  Prev: SPU Built-in Functions,  Up: Target Builtins
42275
422766.56.22 TI C6X Built-in Functions
42277---------------------------------
42278
42279GCC provides intrinsics to access certain instructions of the TI C6X
42280processors.  These intrinsics, listed below, are available after
42281inclusion of the `c6x_intrinsics.h' header file.  They map directly to
42282C6X instructions.
42283
42284
42285     int _sadd (int, int)
42286     int _ssub (int, int)
42287     int _sadd2 (int, int)
42288     int _ssub2 (int, int)
42289     long long _mpy2 (int, int)
42290     long long _smpy2 (int, int)
42291     int _add4 (int, int)
42292     int _sub4 (int, int)
42293     int _saddu4 (int, int)
42294
42295     int _smpy (int, int)
42296     int _smpyh (int, int)
42297     int _smpyhl (int, int)
42298     int _smpylh (int, int)
42299
42300     int _sshl (int, int)
42301     int _subc (int, int)
42302
42303     int _avg2 (int, int)
42304     int _avgu4 (int, int)
42305
42306     int _clrr (int, int)
42307     int _extr (int, int)
42308     int _extru (int, int)
42309     int _abs (int)
42310     int _abs2 (int)
42311
42312
42313File: gcc.info,  Node: TILE-Gx Built-in Functions,  Next: TILEPro Built-in Functions,  Prev: TI C6X Built-in Functions,  Up: Target Builtins
42314
423156.56.23 TILE-Gx Built-in Functions
42316----------------------------------
42317
42318GCC provides intrinsics to access every instruction of the TILE-Gx
42319processor.  The intrinsics are of the form:
42320
42321
42322     unsigned long long __insn_OP (...)
42323
42324 Where OP is the name of the instruction.  Refer to the ISA manual for
42325the complete list of instructions.
42326
42327 GCC also provides intrinsics to directly access the network registers.
42328The intrinsics are:
42329
42330
42331     unsigned long long __tile_idn0_receive (void)
42332     unsigned long long __tile_idn1_receive (void)
42333     unsigned long long __tile_udn0_receive (void)
42334     unsigned long long __tile_udn1_receive (void)
42335     unsigned long long __tile_udn2_receive (void)
42336     unsigned long long __tile_udn3_receive (void)
42337     void __tile_idn_send (unsigned long long)
42338     void __tile_udn_send (unsigned long long)
42339
42340 The intrinsic `void __tile_network_barrier (void)' is used to
42341guarantee that no network operations before it are reordered with those
42342after it.
42343
42344
42345File: gcc.info,  Node: TILEPro Built-in Functions,  Prev: TILE-Gx Built-in Functions,  Up: Target Builtins
42346
423476.56.24 TILEPro Built-in Functions
42348----------------------------------
42349
42350GCC provides intrinsics to access every instruction of the TILEPro
42351processor.  The intrinsics are of the form:
42352
42353
42354     unsigned __insn_OP (...)
42355
42356where OP is the name of the instruction.  Refer to the ISA manual for
42357the complete list of instructions.
42358
42359 GCC also provides intrinsics to directly access the network registers.
42360The intrinsics are:
42361
42362
42363     unsigned __tile_idn0_receive (void)
42364     unsigned __tile_idn1_receive (void)
42365     unsigned __tile_sn_receive (void)
42366     unsigned __tile_udn0_receive (void)
42367     unsigned __tile_udn1_receive (void)
42368     unsigned __tile_udn2_receive (void)
42369     unsigned __tile_udn3_receive (void)
42370     void __tile_idn_send (unsigned)
42371     void __tile_sn_send (unsigned)
42372     void __tile_udn_send (unsigned)
42373
42374 The intrinsic `void __tile_network_barrier (void)' is used to
42375guarantee that no network operations before it are reordered with those
42376after it.
42377
42378
42379File: gcc.info,  Node: Target Format Checks,  Next: Pragmas,  Prev: Target Builtins,  Up: C Extensions
42380
423816.57 Format Checks Specific to Particular Target Machines
42382=========================================================
42383
42384For some target machines, GCC supports additional options to the format
42385attribute (*note Declaring Attributes of Functions: Function
42386Attributes.).
42387
42388* Menu:
42389
42390* Solaris Format Checks::
42391* Darwin Format Checks::
42392
42393
42394File: gcc.info,  Node: Solaris Format Checks,  Next: Darwin Format Checks,  Up: Target Format Checks
42395
423966.57.1 Solaris Format Checks
42397----------------------------
42398
42399Solaris targets support the `cmn_err' (or `__cmn_err__') format check.
42400`cmn_err' accepts a subset of the standard `printf' conversions, and
42401the two-argument `%b' conversion for displaying bit-fields.  See the
42402Solaris man page for `cmn_err' for more information.
42403
42404
42405File: gcc.info,  Node: Darwin Format Checks,  Prev: Solaris Format Checks,  Up: Target Format Checks
42406
424076.57.2 Darwin Format Checks
42408---------------------------
42409
42410Darwin targets support the `CFString' (or `__CFString__') in the format
42411attribute context.  Declarations made with such attribution are parsed
42412for correct syntax and format argument types.  However, parsing of the
42413format string itself is currently undefined and is not carried out by
42414this version of the compiler.
42415
42416 Additionally, `CFStringRefs' (defined by the `CoreFoundation' headers)
42417may also be used as format arguments.  Note that the relevant headers
42418are only likely to be available on Darwin (OSX) installations.  On such
42419installations, the XCode and system documentation provide descriptions
42420of `CFString', `CFStringRefs' and associated functions.
42421
42422
42423File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions
42424
424256.58 Pragmas Accepted by GCC
42426============================
42427
42428GCC supports several types of pragmas, primarily in order to compile
42429code originally written for other compilers.  Note that in general we
42430do not recommend the use of pragmas; *Note Function Attributes::, for
42431further explanation.
42432
42433* Menu:
42434
42435* ARM Pragmas::
42436* M32C Pragmas::
42437* MeP Pragmas::
42438* RS/6000 and PowerPC Pragmas::
42439* Darwin Pragmas::
42440* Solaris Pragmas::
42441* Symbol-Renaming Pragmas::
42442* Structure-Packing Pragmas::
42443* Weak Pragmas::
42444* Diagnostic Pragmas::
42445* Visibility Pragmas::
42446* Push/Pop Macro Pragmas::
42447* Function Specific Option Pragmas::
42448
42449
42450File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Up: Pragmas
42451
424526.58.1 ARM Pragmas
42453------------------
42454
42455The ARM target defines pragmas for controlling the default addition of
42456`long_call' and `short_call' attributes to functions.  *Note Function
42457Attributes::, for information about the effects of these attributes.
42458
42459`long_calls'
42460     Set all subsequent functions to have the `long_call' attribute.
42461
42462`no_long_calls'
42463     Set all subsequent functions to have the `short_call' attribute.
42464
42465`long_calls_off'
42466     Do not affect the `long_call' or `short_call' attributes of
42467     subsequent functions.
42468
42469
42470File: gcc.info,  Node: M32C Pragmas,  Next: MeP Pragmas,  Prev: ARM Pragmas,  Up: Pragmas
42471
424726.58.2 M32C Pragmas
42473-------------------
42474
42475`GCC memregs NUMBER'
42476     Overrides the command-line option `-memregs=' for the current
42477     file.  Use with care!  This pragma must be before any function in
42478     the file, and mixing different memregs values in different objects
42479     may make them incompatible.  This pragma is useful when a
42480     performance-critical function uses a memreg for temporary values,
42481     as it may allow you to reduce the number of memregs used.
42482
42483`ADDRESS NAME ADDRESS'
42484     For any declared symbols matching NAME, this does three things to
42485     that symbol: it forces the symbol to be located at the given
42486     address (a number), it forces the symbol to be volatile, and it
42487     changes the symbol's scope to be static.  This pragma exists for
42488     compatibility with other compilers, but note that the common
42489     `1234H' numeric syntax is not supported (use `0x1234' instead).
42490     Example:
42491
42492          #pragma ADDRESS port3 0x103
42493          char port3;
42494
42495
42496
42497File: gcc.info,  Node: MeP Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Prev: M32C Pragmas,  Up: Pragmas
42498
424996.58.3 MeP Pragmas
42500------------------
42501
42502`custom io_volatile (on|off)'
42503     Overrides the command-line option `-mio-volatile' for the current
42504     file.  Note that for compatibility with future GCC releases, this
42505     option should only be used once before any `io' variables in each
42506     file.
42507
42508`GCC coprocessor available REGISTERS'
42509     Specifies which coprocessor registers are available to the register
42510     allocator.  REGISTERS may be a single register, register range
42511     separated by ellipses, or comma-separated list of those.  Example:
42512
42513          #pragma GCC coprocessor available $c0...$c10, $c28
42514
42515`GCC coprocessor call_saved REGISTERS'
42516     Specifies which coprocessor registers are to be saved and restored
42517     by any function using them.  REGISTERS may be a single register,
42518     register range separated by ellipses, or comma-separated list of
42519     those.  Example:
42520
42521          #pragma GCC coprocessor call_saved $c4...$c6, $c31
42522
42523`GCC coprocessor subclass '(A|B|C|D)' = REGISTERS'
42524     Creates and defines a register class.  These register classes can
42525     be used by inline `asm' constructs.  REGISTERS may be a single
42526     register, register range separated by ellipses, or comma-separated
42527     list of those.  Example:
42528
42529          #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6
42530
42531          asm ("cpfoo %0" : "=B" (x));
42532
42533`GCC disinterrupt NAME , NAME ...'
42534     For the named functions, the compiler adds code to disable
42535     interrupts for the duration of those functions.  If any functions
42536     so named are not encountered in the source, a warning is emitted
42537     that the pragma is not used.  Examples:
42538
42539          #pragma disinterrupt foo
42540          #pragma disinterrupt bar, grill
42541          int foo () { ... }
42542
42543`GCC call NAME , NAME ...'
42544     For the named functions, the compiler always uses a
42545     register-indirect call model when calling the named functions.
42546     Examples:
42547
42548          extern int foo ();
42549          #pragma call foo
42550
42551
42552
42553File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: Darwin Pragmas,  Prev: MeP Pragmas,  Up: Pragmas
42554
425556.58.4 RS/6000 and PowerPC Pragmas
42556----------------------------------
42557
42558The RS/6000 and PowerPC targets define one pragma for controlling
42559whether or not the `longcall' attribute is added to function
42560declarations by default.  This pragma overrides the `-mlongcall'
42561option, but not the `longcall' and `shortcall' attributes.  *Note
42562RS/6000 and PowerPC Options::, for more information about when long
42563calls are and are not necessary.
42564
42565`longcall (1)'
42566     Apply the `longcall' attribute to all subsequent function
42567     declarations.
42568
42569`longcall (0)'
42570     Do not apply the `longcall' attribute to subsequent function
42571     declarations.
42572
42573
42574File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas
42575
425766.58.5 Darwin Pragmas
42577---------------------
42578
42579The following pragmas are available for all architectures running the
42580Darwin operating system.  These are useful for compatibility with other
42581Mac OS compilers.
42582
42583`mark TOKENS...'
42584     This pragma is accepted, but has no effect.
42585
42586`options align=ALIGNMENT'
42587     This pragma sets the alignment of fields in structures.  The
42588     values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or
42589     `power', to emulate PowerPC alignment.  Uses of this pragma nest
42590     properly; to restore the previous setting, use `reset' for the
42591     ALIGNMENT.
42592
42593`segment TOKENS...'
42594     This pragma is accepted, but has no effect.
42595
42596`unused (VAR [, VAR]...)'
42597     This pragma declares variables to be possibly unused.  GCC does not
42598     produce warnings for the listed variables.  The effect is similar
42599     to that of the `unused' attribute, except that this pragma may
42600     appear anywhere within the variables' scopes.
42601
42602
42603File: gcc.info,  Node: Solaris Pragmas,  Next: Symbol-Renaming Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas
42604
426056.58.6 Solaris Pragmas
42606----------------------
42607
42608The Solaris target supports `#pragma redefine_extname' (*note
42609Symbol-Renaming Pragmas::).  It also supports additional `#pragma'
42610directives for compatibility with the system compiler.
42611
42612`align ALIGNMENT (VARIABLE [, VARIABLE]...)'
42613     Increase the minimum alignment of each VARIABLE to ALIGNMENT.
42614     This is the same as GCC's `aligned' attribute *note Variable
42615     Attributes::).  Macro expansion occurs on the arguments to this
42616     pragma when compiling C and Objective-C.  It does not currently
42617     occur when compiling C++, but this is a bug which may be fixed in
42618     a future release.
42619
42620`fini (FUNCTION [, FUNCTION]...)'
42621     This pragma causes each listed FUNCTION to be called after main,
42622     or during shared module unloading, by adding a call to the `.fini'
42623     section.
42624
42625`init (FUNCTION [, FUNCTION]...)'
42626     This pragma causes each listed FUNCTION to be called during
42627     initialization (before `main') or during shared module loading, by
42628     adding a call to the `.init' section.
42629
42630
42631
42632File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Packing Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
42633
426346.58.7 Symbol-Renaming Pragmas
42635------------------------------
42636
42637For compatibility with the Solaris system headers, GCC supports two
42638`#pragma' directives that change the name used in assembly for a given
42639declaration. To get this effect on all platforms supported by GCC, use
42640the asm labels extension (*note Asm Labels::).
42641
42642`redefine_extname OLDNAME NEWNAME'
42643     This pragma gives the C function OLDNAME the assembly symbol
42644     NEWNAME.  The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' is
42645     defined if this pragma is available (currently on all platforms).
42646
42647 This pragma and the asm labels extension interact in a complicated
42648manner.  Here are some corner cases you may want to be aware of.
42649
42650  1. Both pragmas silently apply only to declarations with external
42651     linkage.  Asm labels do not have this restriction.
42652
42653  2. In C++, both pragmas silently apply only to declarations with "C"
42654     linkage.  Again, asm labels do not have this restriction.
42655
42656  3. If any of the three ways of changing the assembly name of a
42657     declaration is applied to a declaration whose assembly name has
42658     already been determined (either by a previous use of one of these
42659     features, or because the compiler needed the assembly name in
42660     order to generate code), and the new name is different, a warning
42661     issues and the name does not change.
42662
42663  4. The OLDNAME used by `#pragma redefine_extname' is always the
42664     C-language name.
42665
42666
42667File: gcc.info,  Node: Structure-Packing Pragmas,  Next: Weak Pragmas,  Prev: Symbol-Renaming Pragmas,  Up: Pragmas
42668
426696.58.8 Structure-Packing Pragmas
42670--------------------------------
42671
42672For compatibility with Microsoft Windows compilers, GCC supports a set
42673of `#pragma' directives that change the maximum alignment of members of
42674structures (other than zero-width bit-fields), unions, and classes
42675subsequently defined. The N value below always is required to be a
42676small power of two and specifies the new alignment in bytes.
42677
42678  1. `#pragma pack(N)' simply sets the new alignment.
42679
42680  2. `#pragma pack()' sets the alignment to the one that was in effect
42681     when compilation started (see also command-line option
42682     `-fpack-struct[=N]' *note Code Gen Options::).
42683
42684  3. `#pragma pack(push[,N])' pushes the current alignment setting on
42685     an internal stack and then optionally sets the new alignment.
42686
42687  4. `#pragma pack(pop)' restores the alignment setting to the one
42688     saved at the top of the internal stack (and removes that stack
42689     entry).  Note that `#pragma pack([N])' does not influence this
42690     internal stack; thus it is possible to have `#pragma pack(push)'
42691     followed by multiple `#pragma pack(N)' instances and finalized by
42692     a single `#pragma pack(pop)'.
42693
42694 Some targets, e.g. i386 and PowerPC, support the `ms_struct' `#pragma'
42695which lays out a structure as the documented `__attribute__
42696((ms_struct))'.
42697  1. `#pragma ms_struct on' turns on the layout for structures declared.
42698
42699  2. `#pragma ms_struct off' turns off the layout for structures
42700     declared.
42701
42702  3. `#pragma ms_struct reset' goes back to the default layout.
42703
42704
42705File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Packing Pragmas,  Up: Pragmas
42706
427076.58.9 Weak Pragmas
42708-------------------
42709
42710For compatibility with SVR4, GCC supports a set of `#pragma' directives
42711for declaring symbols to be weak, and defining weak aliases.
42712
42713`#pragma weak SYMBOL'
42714     This pragma declares SYMBOL to be weak, as if the declaration had
42715     the attribute of the same name.  The pragma may appear before or
42716     after the declaration of SYMBOL.  It is not an error for SYMBOL to
42717     never be defined at all.
42718
42719`#pragma weak SYMBOL1 = SYMBOL2'
42720     This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
42721     an error if SYMBOL2 is not defined in the current translation unit.
42722
42723
42724File: gcc.info,  Node: Diagnostic Pragmas,  Next: Visibility Pragmas,  Prev: Weak Pragmas,  Up: Pragmas
42725
427266.58.10 Diagnostic Pragmas
42727--------------------------
42728
42729GCC allows the user to selectively enable or disable certain types of
42730diagnostics, and change the kind of the diagnostic.  For example, a
42731project's policy might require that all sources compile with `-Werror'
42732but certain files might have exceptions allowing specific types of
42733warnings.  Or, a project might selectively enable diagnostics and treat
42734them as errors depending on which preprocessor macros are defined.
42735
42736`#pragma GCC diagnostic KIND OPTION'
42737     Modifies the disposition of a diagnostic.  Note that not all
42738     diagnostics are modifiable; at the moment only warnings (normally
42739     controlled by `-W...') can be controlled, and not all of them.
42740     Use `-fdiagnostics-show-option' to determine which diagnostics are
42741     controllable and which option controls them.
42742
42743     KIND is `error' to treat this diagnostic as an error, `warning' to
42744     treat it like a warning (even if `-Werror' is in effect), or
42745     `ignored' if the diagnostic is to be ignored.  OPTION is a double
42746     quoted string that matches the command-line option.
42747
42748          #pragma GCC diagnostic warning "-Wformat"
42749          #pragma GCC diagnostic error "-Wformat"
42750          #pragma GCC diagnostic ignored "-Wformat"
42751
42752     Note that these pragmas override any command-line options.  GCC
42753     keeps track of the location of each pragma, and issues diagnostics
42754     according to the state as of that point in the source file.  Thus,
42755     pragmas occurring after a line do not affect diagnostics caused by
42756     that line.
42757
42758`#pragma GCC diagnostic push'
42759`#pragma GCC diagnostic pop'
42760     Causes GCC to remember the state of the diagnostics as of each
42761     `push', and restore to that point at each `pop'.  If a `pop' has
42762     no matching `push', the command-line options are restored.
42763
42764          #pragma GCC diagnostic error "-Wuninitialized"
42765            foo(a);                       /* error is given for this one */
42766          #pragma GCC diagnostic push
42767          #pragma GCC diagnostic ignored "-Wuninitialized"
42768            foo(b);                       /* no diagnostic for this one */
42769          #pragma GCC diagnostic pop
42770            foo(c);                       /* error is given for this one */
42771          #pragma GCC diagnostic pop
42772            foo(d);                       /* depends on command-line options */
42773
42774
42775 GCC also offers a simple mechanism for printing messages during
42776compilation.
42777
42778`#pragma message STRING'
42779     Prints STRING as a compiler message on compilation.  The message
42780     is informational only, and is neither a compilation warning nor an
42781     error.
42782
42783          #pragma message "Compiling " __FILE__ "..."
42784
42785     STRING may be parenthesized, and is printed with location
42786     information.  For example,
42787
42788          #define DO_PRAGMA(x) _Pragma (#x)
42789          #define TODO(x) DO_PRAGMA(message ("TODO - " #x))
42790
42791          TODO(Remember to fix this)
42792
42793     prints `/tmp/file.c:4: note: #pragma message: TODO - Remember to
42794     fix this'.
42795
42796
42797
42798File: gcc.info,  Node: Visibility Pragmas,  Next: Push/Pop Macro Pragmas,  Prev: Diagnostic Pragmas,  Up: Pragmas
42799
428006.58.11 Visibility Pragmas
42801--------------------------
42802
42803`#pragma GCC visibility push(VISIBILITY)'
42804`#pragma GCC visibility pop'
42805     This pragma allows the user to set the visibility for multiple
42806     declarations without having to give each a visibility attribute
42807     *Note Function Attributes::, for more information about visibility
42808     and the attribute syntax.
42809
42810     In C++, `#pragma GCC visibility' affects only namespace-scope
42811     declarations.  Class members and template specializations are not
42812     affected; if you want to override the visibility for a particular
42813     member or instantiation, you must use an attribute.
42814
42815
42816
42817File: gcc.info,  Node: Push/Pop Macro Pragmas,  Next: Function Specific Option Pragmas,  Prev: Visibility Pragmas,  Up: Pragmas
42818
428196.58.12 Push/Pop Macro Pragmas
42820------------------------------
42821
42822For compatibility with Microsoft Windows compilers, GCC supports
42823`#pragma push_macro("MACRO_NAME")' and `#pragma
42824pop_macro("MACRO_NAME")'.
42825
42826`#pragma push_macro("MACRO_NAME")'
42827     This pragma saves the value of the macro named as MACRO_NAME to
42828     the top of the stack for this macro.
42829
42830`#pragma pop_macro("MACRO_NAME")'
42831     This pragma sets the value of the macro named as MACRO_NAME to the
42832     value on top of the stack for this macro. If the stack for
42833     MACRO_NAME is empty, the value of the macro remains unchanged.
42834
42835 For example:
42836
42837     #define X  1
42838     #pragma push_macro("X")
42839     #undef X
42840     #define X -1
42841     #pragma pop_macro("X")
42842     int x [X];
42843
42844In this example, the definition of X as 1 is saved by `#pragma
42845push_macro' and restored by `#pragma pop_macro'.
42846
42847
42848File: gcc.info,  Node: Function Specific Option Pragmas,  Prev: Push/Pop Macro Pragmas,  Up: Pragmas
42849
428506.58.13 Function Specific Option Pragmas
42851----------------------------------------
42852
42853`#pragma GCC target ("STRING"...)'
42854     This pragma allows you to set target specific options for functions
42855     defined later in the source file.  One or more strings can be
42856     specified.  Each function that is defined after this point is as
42857     if `attribute((target("STRING")))' was specified for that
42858     function.  The parenthesis around the options is optional.  *Note
42859     Function Attributes::, for more information about the `target'
42860     attribute and the attribute syntax.
42861
42862     The `#pragma GCC target' attribute is not implemented in GCC
42863     versions earlier than 4.4 for the i386/x86_64 and 4.6 for the
42864     PowerPC back ends.  At present, it is not implemented for other
42865     back ends.
42866
42867`#pragma GCC optimize ("STRING"...)'
42868     This pragma allows you to set global optimization options for
42869     functions defined later in the source file.  One or more strings
42870     can be specified.  Each function that is defined after this point
42871     is as if `attribute((optimize("STRING")))' was specified for that
42872     function.  The parenthesis around the options is optional.  *Note
42873     Function Attributes::, for more information about the `optimize'
42874     attribute and the attribute syntax.
42875
42876     The `#pragma GCC optimize' pragma is not implemented in GCC
42877     versions earlier than 4.4.
42878
42879`#pragma GCC push_options'
42880`#pragma GCC pop_options'
42881     These pragmas maintain a stack of the current target and
42882     optimization options.  It is intended for include files where you
42883     temporarily want to switch to using a different `#pragma GCC
42884     target' or `#pragma GCC optimize' and then to pop back to the
42885     previous options.
42886
42887     The `#pragma GCC push_options' and `#pragma GCC pop_options'
42888     pragmas are not implemented in GCC versions earlier than 4.4.
42889
42890`#pragma GCC reset_options'
42891     This pragma clears the current `#pragma GCC target' and `#pragma
42892     GCC optimize' to use the default switches as specified on the
42893     command line.
42894
42895     The `#pragma GCC reset_options' pragma is not implemented in GCC
42896     versions earlier than 4.4.
42897
42898
42899File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions
42900
429016.59 Unnamed struct/union fields within structs/unions
42902======================================================
42903
42904As permitted by ISO C11 and for compatibility with other compilers, GCC
42905allows you to define a structure or union that contains, as fields,
42906structures and unions without names.  For example:
42907
42908     struct {
42909       int a;
42910       union {
42911         int b;
42912         float c;
42913       };
42914       int d;
42915     } foo;
42916
42917In this example, you are able to access members of the unnamed union
42918with code like `foo.b'.  Note that only unnamed structs and unions are
42919allowed, you may not have, for example, an unnamed `int'.
42920
42921 You must never create such structures that cause ambiguous field
42922definitions.  For example, in this structure:
42923
42924     struct {
42925       int a;
42926       struct {
42927         int a;
42928       };
42929     } foo;
42930
42931it is ambiguous which `a' is being referred to with `foo.a'.  The
42932compiler gives errors for such constructs.
42933
42934 Unless `-fms-extensions' is used, the unnamed field must be a
42935structure or union definition without a tag (for example, `struct { int
42936a; };').  If `-fms-extensions' is used, the field may also be a
42937definition with a tag such as `struct foo { int a; };', a reference to
42938a previously defined structure or union such as `struct foo;', or a
42939reference to a `typedef' name for a previously defined structure or
42940union type.
42941
42942 The option `-fplan9-extensions' enables `-fms-extensions' as well as
42943two other extensions.  First, a pointer to a structure is automatically
42944converted to a pointer to an anonymous field for assignments and
42945function calls.  For example:
42946
42947     struct s1 { int a; };
42948     struct s2 { struct s1; };
42949     extern void f1 (struct s1 *);
42950     void f2 (struct s2 *p) { f1 (p); }
42951
42952In the call to `f1' inside `f2', the pointer `p' is converted into a
42953pointer to the anonymous field.
42954
42955 Second, when the type of an anonymous field is a `typedef' for a
42956`struct' or `union', code may refer to the field using the name of the
42957`typedef'.
42958
42959     typedef struct { int a; } s1;
42960     struct s2 { s1; };
42961     s1 f1 (struct s2 *p) { return p->s1; }
42962
42963 These usages are only permitted when they are not ambiguous.
42964
42965
42966File: gcc.info,  Node: Thread-Local,  Next: Binary constants,  Prev: Unnamed Fields,  Up: C Extensions
42967
429686.60 Thread-Local Storage
42969=========================
42970
42971Thread-local storage (TLS) is a mechanism by which variables are
42972allocated such that there is one instance of the variable per extant
42973thread.  The runtime model GCC uses to implement this originates in the
42974IA-64 processor-specific ABI, but has since been migrated to other
42975processors as well.  It requires significant support from the linker
42976(`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and
42977`libpthread.so'), so it is not available everywhere.
42978
42979 At the user level, the extension is visible with a new storage class
42980keyword: `__thread'.  For example:
42981
42982     __thread int i;
42983     extern __thread struct state s;
42984     static __thread char *p;
42985
42986 The `__thread' specifier may be used alone, with the `extern' or
42987`static' specifiers, but with no other storage class specifier.  When
42988used with `extern' or `static', `__thread' must appear immediately
42989after the other storage class specifier.
42990
42991 The `__thread' specifier may be applied to any global, file-scoped
42992static, function-scoped static, or static data member of a class.  It
42993may not be applied to block-scoped automatic or non-static data member.
42994
42995 When the address-of operator is applied to a thread-local variable, it
42996is evaluated at run time and returns the address of the current thread's
42997instance of that variable.  An address so obtained may be used by any
42998thread.  When a thread terminates, any pointers to thread-local
42999variables in that thread become invalid.
43000
43001 No static initialization may refer to the address of a thread-local
43002variable.
43003
43004 In C++, if an initializer is present for a thread-local variable, it
43005must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
43006standard.
43007
43008 See ELF Handling For Thread-Local Storage
43009(http://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of
43010the four thread-local storage addressing models, and how the runtime is
43011expected to function.
43012
43013* Menu:
43014
43015* C99 Thread-Local Edits::
43016* C++98 Thread-Local Edits::
43017
43018
43019File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local
43020
430216.60.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
43022-------------------------------------------------------
43023
43024The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
43025document the exact semantics of the language extension.
43026
43027   * `5.1.2  Execution environments'
43028
43029     Add new text after paragraph 1
43030
43031          Within either execution environment, a "thread" is a flow of
43032          control within a program.  It is implementation defined
43033          whether or not there may be more than one thread associated
43034          with a program.  It is implementation defined how threads
43035          beyond the first are created, the name and type of the
43036          function called at thread startup, and how threads may be
43037          terminated.  However, objects with thread storage duration
43038          shall be initialized before thread startup.
43039
43040   * `6.2.4  Storage durations of objects'
43041
43042     Add new text before paragraph 3
43043
43044          An object whose identifier is declared with the storage-class
43045          specifier `__thread' has "thread storage duration".  Its
43046          lifetime is the entire execution of the thread, and its
43047          stored value is initialized only once, prior to thread
43048          startup.
43049
43050   * `6.4.1  Keywords'
43051
43052     Add `__thread'.
43053
43054   * `6.7.1  Storage-class specifiers'
43055
43056     Add `__thread' to the list of storage class specifiers in
43057     paragraph 1.
43058
43059     Change paragraph 2 to
43060
43061          With the exception of `__thread', at most one storage-class
43062          specifier may be given [...].  The `__thread' specifier may
43063          be used alone, or immediately following `extern' or `static'.
43064
43065     Add new text after paragraph 6
43066
43067          The declaration of an identifier for a variable that has
43068          block scope that specifies `__thread' shall also specify
43069          either `extern' or `static'.
43070
43071          The `__thread' specifier shall be used only with variables.
43072
43073
43074File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
43075
430766.60.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
43077--------------------------------------------------------
43078
43079The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
43080that document the exact semantics of the language extension.
43081
43082   * [intro.execution]
43083
43084     New text after paragraph 4
43085
43086          A "thread" is a flow of control within the abstract machine.
43087          It is implementation defined whether or not there may be more
43088          than one thread.
43089
43090     New text after paragraph 7
43091
43092          It is unspecified whether additional action must be taken to
43093          ensure when and whether side effects are visible to other
43094          threads.
43095
43096   * [lex.key]
43097
43098     Add `__thread'.
43099
43100   * [basic.start.main]
43101
43102     Add after paragraph 5
43103
43104          The thread that begins execution at the `main' function is
43105          called the "main thread".  It is implementation defined how
43106          functions beginning threads other than the main thread are
43107          designated or typed.  A function so designated, as well as
43108          the `main' function, is called a "thread startup function".
43109          It is implementation defined what happens if a thread startup
43110          function returns.  It is implementation defined what happens
43111          to other threads when any thread calls `exit'.
43112
43113   * [basic.start.init]
43114
43115     Add after paragraph 4
43116
43117          The storage for an object of thread storage duration shall be
43118          statically initialized before the first statement of the
43119          thread startup function.  An object of thread storage
43120          duration shall not require dynamic initialization.
43121
43122   * [basic.start.term]
43123
43124     Add after paragraph 3
43125
43126          The type of an object with thread storage duration shall not
43127          have a non-trivial destructor, nor shall it be an array type
43128          whose elements (directly or indirectly) have non-trivial
43129          destructors.
43130
43131   * [basic.stc]
43132
43133     Add "thread storage duration" to the list in paragraph 1.
43134
43135     Change paragraph 2
43136
43137          Thread, static, and automatic storage durations are
43138          associated with objects introduced by declarations [...].
43139
43140     Add `__thread' to the list of specifiers in paragraph 3.
43141
43142   * [basic.stc.thread]
43143
43144     New section before [basic.stc.static]
43145
43146          The keyword `__thread' applied to a non-local object gives the
43147          object thread storage duration.
43148
43149          A local variable or class data member declared both `static'
43150          and `__thread' gives the variable or member thread storage
43151          duration.
43152
43153   * [basic.stc.static]
43154
43155     Change paragraph 1
43156
43157          All objects that have neither thread storage duration, dynamic
43158          storage duration nor are local [...].
43159
43160   * [dcl.stc]
43161
43162     Add `__thread' to the list in paragraph 1.
43163
43164     Change paragraph 1
43165
43166          With the exception of `__thread', at most one
43167          STORAGE-CLASS-SPECIFIER shall appear in a given
43168          DECL-SPECIFIER-SEQ.  The `__thread' specifier may be used
43169          alone, or immediately following the `extern' or `static'
43170          specifiers.  [...]
43171
43172     Add after paragraph 5
43173
43174          The `__thread' specifier can be applied only to the names of
43175          objects and to anonymous unions.
43176
43177   * [class.mem]
43178
43179     Add after paragraph 6
43180
43181          Non-`static' members shall not be `__thread'.
43182
43183
43184File: gcc.info,  Node: Binary constants,  Prev: Thread-Local,  Up: C Extensions
43185
431866.61 Binary constants using the `0b' prefix
43187===========================================
43188
43189Integer constants can be written as binary constants, consisting of a
43190sequence of `0' and `1' digits, prefixed by `0b' or `0B'.  This is
43191particularly useful in environments that operate a lot on the bit level
43192(like microcontrollers).
43193
43194 The following statements are identical:
43195
43196     i =       42;
43197     i =     0x2a;
43198     i =      052;
43199     i = 0b101010;
43200
43201 The type of these constants follows the same rules as for octal or
43202hexadecimal integer constants, so suffixes like `L' or `UL' can be
43203applied.
43204
43205
43206File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C Extensions,  Up: Top
43207
432087 Extensions to the C++ Language
43209********************************
43210
43211The GNU compiler provides these extensions to the C++ language (and you
43212can also use most of the C language extensions in your C++ programs).
43213If you want to write code that checks whether these features are
43214available, you can test for the GNU compiler the same way as for C
43215programs: check for a predefined macro `__GNUC__'.  You can also use
43216`__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
43217(cpp)Common Predefined Macros.).
43218
43219* Menu:
43220
43221* C++ Volatiles::       What constitutes an access to a volatile object.
43222* Restricted Pointers:: C99 restricted pointers and references.
43223* Vague Linkage::       Where G++ puts inlines, vtables and such.
43224* C++ Interface::       You can use a single C++ header file for both
43225                        declarations and definitions.
43226* Template Instantiation:: Methods for ensuring that exactly one copy of
43227                        each needed template instantiation is emitted.
43228* Bound member functions:: You can extract a function pointer to the
43229                        method denoted by a `->*' or `.*' expression.
43230* C++ Attributes::      Variable, function, and type attributes for C++ only.
43231* Function Multiversioning::   Declaring multiple function versions.
43232* Namespace Association:: Strong using-directives for namespace association.
43233* Type Traits::         Compiler support for type traits
43234* Java Exceptions::     Tweaking exception handling to work with Java.
43235* Deprecated Features:: Things will disappear from G++.
43236* Backwards Compatibility:: Compatibilities with earlier definitions of C++.
43237
43238
43239File: gcc.info,  Node: C++ Volatiles,  Next: Restricted Pointers,  Up: C++ Extensions
43240
432417.1 When is a Volatile C++ Object Accessed?
43242===========================================
43243
43244The C++ standard differs from the C standard in its treatment of
43245volatile objects.  It fails to specify what constitutes a volatile
43246access, except to say that C++ should behave in a similar manner to C
43247with respect to volatiles, where possible.  However, the different
43248lvalueness of expressions between C and C++ complicate the behavior.
43249G++ behaves the same as GCC for volatile access, *Note Volatiles: C
43250Extensions, for a description of GCC's behavior.
43251
43252 The C and C++ language specifications differ when an object is
43253accessed in a void context:
43254
43255     volatile int *src = SOMEVALUE;
43256     *src;
43257
43258 The C++ standard specifies that such expressions do not undergo lvalue
43259to rvalue conversion, and that the type of the dereferenced object may
43260be incomplete.  The C++ standard does not specify explicitly that it is
43261lvalue to rvalue conversion that is responsible for causing an access.
43262There is reason to believe that it is, because otherwise certain simple
43263expressions become undefined.  However, because it would surprise most
43264programmers, G++ treats dereferencing a pointer to volatile object of
43265complete type as GCC would do for an equivalent type in C.  When the
43266object has incomplete type, G++ issues a warning; if you wish to force
43267an error, you must force a conversion to rvalue with, for instance, a
43268static cast.
43269
43270 When using a reference to volatile, G++ does not treat equivalent
43271expressions as accesses to volatiles, but instead issues a warning that
43272no volatile is accessed.  The rationale for this is that otherwise it
43273becomes difficult to determine where volatile access occur, and not
43274possible to ignore the return value from functions returning volatile
43275references.  Again, if you wish to force a read, cast the reference to
43276an rvalue.
43277
43278 G++ implements the same behavior as GCC does when assigning to a
43279volatile object--there is no reread of the assigned-to object, the
43280assigned rvalue is reused.  Note that in C++ assignment expressions are
43281lvalues, and if used as an lvalue, the volatile object is referred to.
43282For instance, VREF refers to VOBJ, as expected, in the following
43283example:
43284
43285     volatile int vobj;
43286     volatile int &vref = vobj = SOMETHING;
43287
43288
43289File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: C++ Volatiles,  Up: C++ Extensions
43290
432917.2 Restricting Pointer Aliasing
43292================================
43293
43294As with the C front end, G++ understands the C99 feature of restricted
43295pointers, specified with the `__restrict__', or `__restrict' type
43296qualifier.  Because you cannot compile C++ by specifying the `-std=c99'
43297language flag, `restrict' is not a keyword in C++.
43298
43299 In addition to allowing restricted pointers, you can specify restricted
43300references, which indicate that the reference is not aliased in the
43301local context.
43302
43303     void fn (int *__restrict__ rptr, int &__restrict__ rref)
43304     {
43305       /* ... */
43306     }
43307
43308In the body of `fn', RPTR points to an unaliased integer and RREF
43309refers to a (different) unaliased integer.
43310
43311 You may also specify whether a member function's THIS pointer is
43312unaliased by using `__restrict__' as a member function qualifier.
43313
43314     void T::fn () __restrict__
43315     {
43316       /* ... */
43317     }
43318
43319Within the body of `T::fn', THIS has the effective definition `T
43320*__restrict__ const this'.  Notice that the interpretation of a
43321`__restrict__' member function qualifier is different to that of
43322`const' or `volatile' qualifier, in that it is applied to the pointer
43323rather than the object.  This is consistent with other compilers that
43324implement restricted pointers.
43325
43326 As with all outermost parameter qualifiers, `__restrict__' is ignored
43327in function definition matching.  This means you only need to specify
43328`__restrict__' in a function definition, rather than in a function
43329prototype as well.
43330
43331
43332File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions
43333
433347.3 Vague Linkage
43335=================
43336
43337There are several constructs in C++ that require space in the object
43338file but are not clearly tied to a single translation unit.  We say that
43339these constructs have "vague linkage".  Typically such constructs are
43340emitted wherever they are needed, though sometimes we can be more
43341clever.
43342
43343Inline Functions
43344     Inline functions are typically defined in a header file which can
43345     be included in many different compilations.  Hopefully they can
43346     usually be inlined, but sometimes an out-of-line copy is
43347     necessary, if the address of the function is taken or if inlining
43348     fails.  In general, we emit an out-of-line copy in all translation
43349     units where one is needed.  As an exception, we only emit inline
43350     virtual functions with the vtable, since it always requires a copy.
43351
43352     Local static variables and string constants used in an inline
43353     function are also considered to have vague linkage, since they
43354     must be shared between all inlined and out-of-line instances of
43355     the function.
43356
43357VTables
43358     C++ virtual functions are implemented in most compilers using a
43359     lookup table, known as a vtable.  The vtable contains pointers to
43360     the virtual functions provided by a class, and each object of the
43361     class contains a pointer to its vtable (or vtables, in some
43362     multiple-inheritance situations).  If the class declares any
43363     non-inline, non-pure virtual functions, the first one is chosen as
43364     the "key method" for the class, and the vtable is only emitted in
43365     the translation unit where the key method is defined.
43366
43367     _Note:_ If the chosen key method is later defined as inline, the
43368     vtable is still emitted in every translation unit that defines it.
43369     Make sure that any inline virtuals are declared inline in the class
43370     body, even if they are not defined there.
43371
43372`type_info' objects
43373     C++ requires information about types to be written out in order to
43374     implement `dynamic_cast', `typeid' and exception handling.  For
43375     polymorphic classes (classes with virtual functions), the
43376     `type_info' object is written out along with the vtable so that
43377     `dynamic_cast' can determine the dynamic type of a class object at
43378     run time.  For all other types, we write out the `type_info'
43379     object when it is used: when applying `typeid' to an expression,
43380     throwing an object, or referring to a type in a catch clause or
43381     exception specification.
43382
43383Template Instantiations
43384     Most everything in this section also applies to template
43385     instantiations, but there are other options as well.  *Note
43386     Where's the Template?: Template Instantiation.
43387
43388
43389 When used with GNU ld version 2.8 or later on an ELF system such as
43390GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
43391these constructs will be discarded at link time.  This is known as
43392COMDAT support.
43393
43394 On targets that don't support COMDAT, but do support weak symbols, GCC
43395uses them.  This way one copy overrides all the others, but the unused
43396copies still take up space in the executable.
43397
43398 For targets that do not support either COMDAT or weak symbols, most
43399entities with vague linkage are emitted as local symbols to avoid
43400duplicate definition errors from the linker.  This does not happen for
43401local statics in inlines, however, as having multiple copies almost
43402certainly breaks things.
43403
43404 *Note Declarations and Definitions in One Header: C++ Interface, for
43405another way to control placement of these constructs.
43406
43407
43408File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions
43409
434107.4 #pragma interface and implementation
43411========================================
43412
43413`#pragma interface' and `#pragma implementation' provide the user with
43414a way of explicitly directing the compiler to emit entities with vague
43415linkage (and debugging information) in a particular translation unit.
43416
43417 _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most
43418cases, because of COMDAT support and the "key method" heuristic
43419mentioned in *note Vague Linkage::.  Using them can actually cause your
43420program to grow due to unnecessary out-of-line copies of inline
43421functions.  Currently (3.4) the only benefit of these `#pragma's is
43422reduced duplication of debugging information, and that should be
43423addressed soon on DWARF 2 targets with the use of COMDAT groups.
43424
43425`#pragma interface'
43426`#pragma interface "SUBDIR/OBJECTS.h"'
43427     Use this directive in _header files_ that define object classes,
43428     to save space in most of the object files that use those classes.
43429     Normally, local copies of certain information (backup copies of
43430     inline member functions, debugging information, and the internal
43431     tables that implement virtual functions) must be kept in each
43432     object file that includes class definitions.  You can use this
43433     pragma to avoid such duplication.  When a header file containing
43434     `#pragma interface' is included in a compilation, this auxiliary
43435     information is not generated (unless the main input source file
43436     itself uses `#pragma implementation').  Instead, the object files
43437     contain references to be resolved at link time.
43438
43439     The second form of this directive is useful for the case where you
43440     have multiple headers with the same name in different directories.
43441     If you use this form, you must specify the same string to `#pragma
43442     implementation'.
43443
43444`#pragma implementation'
43445`#pragma implementation "OBJECTS.h"'
43446     Use this pragma in a _main input file_, when you want full output
43447     from included header files to be generated (and made globally
43448     visible).  The included header file, in turn, should use `#pragma
43449     interface'.  Backup copies of inline member functions, debugging
43450     information, and the internal tables used to implement virtual
43451     functions are all generated in implementation files.
43452
43453     If you use `#pragma implementation' with no argument, it applies to
43454     an include file with the same basename(1) as your source file.
43455     For example, in `allclass.cc', giving just `#pragma implementation'
43456     by itself is equivalent to `#pragma implementation "allclass.h"'.
43457
43458     In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as
43459     an implementation file whenever you would include it from
43460     `allclass.cc' even if you never specified `#pragma
43461     implementation'.  This was deemed to be more trouble than it was
43462     worth, however, and disabled.
43463
43464     Use the string argument if you want a single implementation file to
43465     include code from multiple header files.  (You must also use
43466     `#include' to include the header file; `#pragma implementation'
43467     only specifies how to use the file--it doesn't actually include
43468     it.)
43469
43470     There is no way to split up the contents of a single header file
43471     into multiple implementation files.
43472
43473 `#pragma implementation' and `#pragma interface' also have an effect
43474on function inlining.
43475
43476 If you define a class in a header file marked with `#pragma
43477interface', the effect on an inline function defined in that class is
43478similar to an explicit `extern' declaration--the compiler emits no code
43479at all to define an independent version of the function.  Its
43480definition is used only for inlining with its callers.
43481
43482 Conversely, when you include the same header file in a main source file
43483that declares it as `#pragma implementation', the compiler emits code
43484for the function itself; this defines a version of the function that
43485can be found via pointers (or by callers compiled without inlining).
43486If all calls to the function can be inlined, you can avoid emitting the
43487function by compiling with `-fno-implement-inlines'.  If any calls are
43488not inlined, you will get linker errors.
43489
43490 ---------- Footnotes ----------
43491
43492 (1) A file's "basename" is the name stripped of all leading path
43493information and of trailing suffixes, such as `.h' or `.C' or `.cc'.
43494
43495
43496File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
43497
434987.5 Where's the Template?
43499=========================
43500
43501C++ templates are the first language feature to require more
43502intelligence from the environment than one usually finds on a UNIX
43503system.  Somehow the compiler and linker have to make sure that each
43504template instance occurs exactly once in the executable if it is needed,
43505and not at all otherwise.  There are two basic approaches to this
43506problem, which are referred to as the Borland model and the Cfront
43507model.
43508
43509Borland model
43510     Borland C++ solved the template instantiation problem by adding
43511     the code equivalent of common blocks to their linker; the compiler
43512     emits template instances in each translation unit that uses them,
43513     and the linker collapses them together.  The advantage of this
43514     model is that the linker only has to consider the object files
43515     themselves; there is no external complexity to worry about.  This
43516     disadvantage is that compilation time is increased because the
43517     template code is being compiled repeatedly.  Code written for this
43518     model tends to include definitions of all templates in the header
43519     file, since they must be seen to be instantiated.
43520
43521Cfront model
43522     The AT&T C++ translator, Cfront, solved the template instantiation
43523     problem by creating the notion of a template repository, an
43524     automatically maintained place where template instances are
43525     stored.  A more modern version of the repository works as follows:
43526     As individual object files are built, the compiler places any
43527     template definitions and instantiations encountered in the
43528     repository.  At link time, the link wrapper adds in the objects in
43529     the repository and compiles any needed instances that were not
43530     previously emitted.  The advantages of this model are more optimal
43531     compilation speed and the ability to use the system linker; to
43532     implement the Borland model a compiler vendor also needs to
43533     replace the linker.  The disadvantages are vastly increased
43534     complexity, and thus potential for error; for some code this can be
43535     just as transparent, but in practice it can been very difficult to
43536     build multiple programs in one directory and one program in
43537     multiple directories.  Code written for this model tends to
43538     separate definitions of non-inline member templates into a
43539     separate file, which should be compiled separately.
43540
43541 When used with GNU ld version 2.8 or later on an ELF system such as
43542GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the
43543Borland model.  On other systems, G++ implements neither automatic
43544model.
43545
43546 You have the following options for dealing with template
43547instantiations:
43548
43549  1. Compile your template-using code with `-frepo'.  The compiler
43550     generates files with the extension `.rpo' listing all of the
43551     template instantiations used in the corresponding object files that
43552     could be instantiated there; the link wrapper, `collect2', then
43553     updates the `.rpo' files to tell the compiler where to place those
43554     instantiations and rebuild any affected object files.  The
43555     link-time overhead is negligible after the first pass, as the
43556     compiler continues to place the instantiations in the same files.
43557
43558     This is your best option for application code written for the
43559     Borland model, as it just works.  Code written for the Cfront model
43560     needs to be modified so that the template definitions are
43561     available at one or more points of instantiation; usually this is
43562     as simple as adding `#include <tmethods.cc>' to the end of each
43563     template header.
43564
43565     For library code, if you want the library to provide all of the
43566     template instantiations it needs, just try to link all of its
43567     object files together; the link will fail, but cause the
43568     instantiations to be generated as a side effect.  Be warned,
43569     however, that this may cause conflicts if multiple libraries try
43570     to provide the same instantiations.  For greater control, use
43571     explicit instantiation as described in the next option.
43572
43573  2. Compile your code with `-fno-implicit-templates' to disable the
43574     implicit generation of template instances, and explicitly
43575     instantiate all the ones you use.  This approach requires more
43576     knowledge of exactly which instances you need than do the others,
43577     but it's less mysterious and allows greater control.  You can
43578     scatter the explicit instantiations throughout your program,
43579     perhaps putting them in the translation units where the instances
43580     are used or the translation units that define the templates
43581     themselves; you can put all of the explicit instantiations you
43582     need into one big file; or you can create small files like
43583
43584          #include "Foo.h"
43585          #include "Foo.cc"
43586
43587          template class Foo<int>;
43588          template ostream& operator <<
43589                          (ostream&, const Foo<int>&);
43590
43591     for each of the instances you need, and create a template
43592     instantiation library from those.
43593
43594     If you are using Cfront-model code, you can probably get away with
43595     not using `-fno-implicit-templates' when compiling files that don't
43596     `#include' the member template definitions.
43597
43598     If you use one big file to do the instantiations, you may want to
43599     compile it without `-fno-implicit-templates' so you get all of the
43600     instances required by your explicit instantiations (but not by any
43601     other files) without having to specify them as well.
43602
43603     The ISO C++ 2011 standard allows forward declaration of explicit
43604     instantiations (with `extern'). G++ supports explicit instantiation
43605     declarations in C++98 mode and has extended the template
43606     instantiation syntax to support instantiation of the compiler
43607     support data for a template class (i.e. the vtable) without
43608     instantiating any of its members (with `inline'), and
43609     instantiation of only the static data members of a template class,
43610     without the support data or member functions (with (`static'):
43611
43612          extern template int max (int, int);
43613          inline template class Foo<int>;
43614          static template class Foo<int>;
43615
43616  3. Do nothing.  Pretend G++ does implement automatic instantiation
43617     management.  Code written for the Borland model works fine, but
43618     each translation unit contains instances of each of the templates
43619     it uses.  In a large program, this can lead to an unacceptable
43620     amount of code duplication.
43621
43622
43623File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions
43624
436257.6 Extracting the function pointer from a bound pointer to member function
43626===========================================================================
43627
43628In C++, pointer to member functions (PMFs) are implemented using a wide
43629pointer of sorts to handle all the possible call mechanisms; the PMF
43630needs to store information about how to adjust the `this' pointer, and
43631if the function pointed to is virtual, where to find the vtable, and
43632where in the vtable to look for the member function.  If you are using
43633PMFs in an inner loop, you should really reconsider that decision.  If
43634that is not an option, you can extract the pointer to the function that
43635would be called for a given object/PMF pair and call it directly inside
43636the inner loop, to save a bit of time.
43637
43638 Note that you still pay the penalty for the call through a function
43639pointer; on most modern architectures, such a call defeats the branch
43640prediction features of the CPU.  This is also true of normal virtual
43641function calls.
43642
43643 The syntax for this extension is
43644
43645     extern A a;
43646     extern int (A::*fp)();
43647     typedef int (*fptr)(A *);
43648
43649     fptr p = (fptr)(a.*fp);
43650
43651 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no
43652object is needed to obtain the address of the function.  They can be
43653converted to function pointers directly:
43654
43655     fptr p1 = (fptr)(&A::foo);
43656
43657 You must specify `-Wno-pmf-conversions' to use this extension.
43658
43659
43660File: gcc.info,  Node: C++ Attributes,  Next: Function Multiversioning,  Prev: Bound member functions,  Up: C++ Extensions
43661
436627.7 C++-Specific Variable, Function, and Type Attributes
43663========================================================
43664
43665Some attributes only make sense for C++ programs.
43666
43667`abi_tag ("TAG", ...)'
43668     The `abi_tag' attribute can be applied to a function or class
43669     declaration.  It modifies the mangled name of the function or
43670     class to incorporate the tag name, in order to distinguish the
43671     function or class from an earlier version with a different ABI;
43672     perhaps the class has changed size, or the function has a
43673     different return type that is not encoded in the mangled name.
43674
43675     The argument can be a list of strings of arbitrary length.  The
43676     strings are sorted on output, so the order of the list is
43677     unimportant.
43678
43679     A redeclaration of a function or class must not add new ABI tags,
43680     since doing so would change the mangled name.
43681
43682     The `-Wabi-tag' flag enables a warning about a class which does
43683     not have all the ABI tags used by its subobjects and virtual
43684     functions; for users with code that needs to coexist with an
43685     earlier ABI, using this option can help to find all affected types
43686     that need to be tagged.
43687
43688`init_priority (PRIORITY)'
43689     In Standard C++, objects defined at namespace scope are guaranteed
43690     to be initialized in an order in strict accordance with that of
43691     their definitions _in a given translation unit_.  No guarantee is
43692     made for initializations across translation units.  However, GNU
43693     C++ allows users to control the order of initialization of objects
43694     defined at namespace scope with the `init_priority' attribute by
43695     specifying a relative PRIORITY, a constant integral expression
43696     currently bounded between 101 and 65535 inclusive.  Lower numbers
43697     indicate a higher priority.
43698
43699     In the following example, `A' would normally be created before
43700     `B', but the `init_priority' attribute reverses that order:
43701
43702          Some_Class  A  __attribute__ ((init_priority (2000)));
43703          Some_Class  B  __attribute__ ((init_priority (543)));
43704
43705     Note that the particular values of PRIORITY do not matter; only
43706     their relative ordering.
43707
43708`java_interface'
43709     This type attribute informs C++ that the class is a Java
43710     interface.  It may only be applied to classes declared within an
43711     `extern "Java"' block.  Calls to methods declared in this
43712     interface are dispatched using GCJ's interface table mechanism,
43713     instead of regular virtual table dispatch.
43714
43715
43716 See also *note Namespace Association::.
43717
43718
43719File: gcc.info,  Node: Function Multiversioning,  Next: Namespace Association,  Prev: C++ Attributes,  Up: C++ Extensions
43720
437217.8 Function Multiversioning
43722============================
43723
43724With the GNU C++ front end, for target i386, you may specify multiple
43725versions of a function, where each function is specialized for a
43726specific target feature.  At runtime, the appropriate version of the
43727function is automatically executed depending on the characteristics of
43728the execution platform.  Here is an example.
43729
43730     __attribute__ ((target ("default")))
43731     int foo ()
43732     {
43733       // The default version of foo.
43734       return 0;
43735     }
43736
43737     __attribute__ ((target ("sse4.2")))
43738     int foo ()
43739     {
43740       // foo version for SSE4.2
43741       return 1;
43742     }
43743
43744     __attribute__ ((target ("arch=atom")))
43745     int foo ()
43746     {
43747       // foo version for the Intel ATOM processor
43748       return 2;
43749     }
43750
43751     __attribute__ ((target ("arch=amdfam10")))
43752     int foo ()
43753     {
43754       // foo version for the AMD Family 0x10 processors.
43755       return 3;
43756     }
43757
43758     int main ()
43759     {
43760       int (*p)() = &foo;
43761       assert ((*p) () == foo ());
43762       return 0;
43763     }
43764
43765 In the above example, four versions of function foo are created. The
43766first version of foo with the target attribute "default" is the default
43767version.  This version gets executed when no other target specific
43768version qualifies for execution on a particular platform. A new version
43769of foo is created by using the same function signature but with a
43770different target string.  Function foo is called or a pointer to it is
43771taken just like a regular function.  GCC takes care of doing the
43772dispatching to call the right version at runtime.  Refer to the GCC
43773wiki on Function Multiversioning
43774(http://gcc.gnu.org/wiki/FunctionMultiVersioning) for more details.
43775
43776
43777File: gcc.info,  Node: Namespace Association,  Next: Type Traits,  Prev: Function Multiversioning,  Up: C++ Extensions
43778
437797.9 Namespace Association
43780=========================
43781
43782*Caution:* The semantics of this extension are equivalent to C++ 2011
43783inline namespaces.  Users should use inline namespaces instead as this
43784extension will be removed in future versions of G++.
43785
43786 A using-directive with `__attribute ((strong))' is stronger than a
43787normal using-directive in two ways:
43788
43789   * Templates from the used namespace can be specialized and explicitly
43790     instantiated as though they were members of the using namespace.
43791
43792   * The using namespace is considered an associated namespace of all
43793     templates in the used namespace for purposes of argument-dependent
43794     name lookup.
43795
43796 The used namespace must be nested within the using namespace so that
43797normal unqualified lookup works properly.
43798
43799 This is useful for composing a namespace transparently from
43800implementation namespaces.  For example:
43801
43802     namespace std {
43803       namespace debug {
43804         template <class T> struct A { };
43805       }
43806       using namespace debug __attribute ((__strong__));
43807       template <> struct A<int> { };   // ok to specialize
43808
43809       template <class T> void f (A<T>);
43810     }
43811
43812     int main()
43813     {
43814       f (std::A<float>());             // lookup finds std::f
43815       f (std::A<int>());
43816     }
43817
43818
43819File: gcc.info,  Node: Type Traits,  Next: Java Exceptions,  Prev: Namespace Association,  Up: C++ Extensions
43820
438217.10 Type Traits
43822================
43823
43824The C++ front end implements syntactic extensions that allow
43825compile-time determination of various characteristics of a type (or of a
43826pair of types).
43827
43828`__has_nothrow_assign (type)'
43829     If `type' is const qualified or is a reference type then the trait
43830     is false.  Otherwise if `__has_trivial_assign (type)' is true then
43831     the trait is true, else if `type' is a cv class or union type with
43832     copy assignment operators that are known not to throw an exception
43833     then the trait is true, else it is false.  Requires: `type' shall
43834     be a complete type, (possibly cv-qualified) `void', or an array of
43835     unknown bound.
43836
43837`__has_nothrow_copy (type)'
43838     If `__has_trivial_copy (type)' is true then the trait is true,
43839     else if `type' is a cv class or union type with copy constructors
43840     that are known not to throw an exception then the trait is true,
43841     else it is false.  Requires: `type' shall be a complete type,
43842     (possibly cv-qualified) `void', or an array of unknown bound.
43843
43844`__has_nothrow_constructor (type)'
43845     If `__has_trivial_constructor (type)' is true then the trait is
43846     true, else if `type' is a cv class or union type (or array
43847     thereof) with a default constructor that is known not to throw an
43848     exception then the trait is true, else it is false.  Requires:
43849     `type' shall be a complete type, (possibly cv-qualified) `void',
43850     or an array of unknown bound.
43851
43852`__has_trivial_assign (type)'
43853     If `type' is const qualified or is a reference type then the trait
43854     is false.  Otherwise if `__is_pod (type)' is true then the trait is
43855     true, else if `type' is a cv class or union type with a trivial
43856     copy assignment ([class.copy]) then the trait is true, else it is
43857     false.  Requires: `type' shall be a complete type, (possibly
43858     cv-qualified) `void', or an array of unknown bound.
43859
43860`__has_trivial_copy (type)'
43861     If `__is_pod (type)' is true or `type' is a reference type then
43862     the trait is true, else if `type' is a cv class or union type with
43863     a trivial copy constructor ([class.copy]) then the trait is true,
43864     else it is false.  Requires: `type' shall be a complete type,
43865     (possibly cv-qualified) `void', or an array of unknown bound.
43866
43867`__has_trivial_constructor (type)'
43868     If `__is_pod (type)' is true then the trait is true, else if
43869     `type' is a cv class or union type (or array thereof) with a
43870     trivial default constructor ([class.ctor]) then the trait is true,
43871     else it is false.  Requires: `type' shall be a complete type,
43872     (possibly cv-qualified) `void', or an array of unknown bound.
43873
43874`__has_trivial_destructor (type)'
43875     If `__is_pod (type)' is true or `type' is a reference type then
43876     the trait is true, else if `type' is a cv class or union type (or
43877     array thereof) with a trivial destructor ([class.dtor]) then the
43878     trait is true, else it is false.  Requires: `type' shall be a
43879     complete type, (possibly cv-qualified) `void', or an array of
43880     unknown bound.
43881
43882`__has_virtual_destructor (type)'
43883     If `type' is a class type with a virtual destructor ([class.dtor])
43884     then the trait is true, else it is false.  Requires: `type' shall
43885     be a complete type, (possibly cv-qualified) `void', or an array of
43886     unknown bound.
43887
43888`__is_abstract (type)'
43889     If `type' is an abstract class ([class.abstract]) then the trait
43890     is true, else it is false.  Requires: `type' shall be a complete
43891     type, (possibly cv-qualified) `void', or an array of unknown bound.
43892
43893`__is_base_of (base_type, derived_type)'
43894     If `base_type' is a base class of `derived_type' ([class.derived])
43895     then the trait is true, otherwise it is false.  Top-level cv
43896     qualifications of `base_type' and `derived_type' are ignored.  For
43897     the purposes of this trait, a class type is considered is own
43898     base.  Requires: if `__is_class (base_type)' and `__is_class
43899     (derived_type)' are true and `base_type' and `derived_type' are
43900     not the same type (disregarding cv-qualifiers), `derived_type'
43901     shall be a complete type.  Diagnostic is produced if this
43902     requirement is not met.
43903
43904`__is_class (type)'
43905     If `type' is a cv class type, and not a union type
43906     ([basic.compound]) the trait is true, else it is false.
43907
43908`__is_empty (type)'
43909     If `__is_class (type)' is false then the trait is false.
43910     Otherwise `type' is considered empty if and only if: `type' has no
43911     non-static data members, or all non-static data members, if any,
43912     are bit-fields of length 0, and `type' has no virtual members, and
43913     `type' has no virtual base classes, and `type' has no base classes
43914     `base_type' for which `__is_empty (base_type)' is false.
43915     Requires: `type' shall be a complete type, (possibly cv-qualified)
43916     `void', or an array of unknown bound.
43917
43918`__is_enum (type)'
43919     If `type' is a cv enumeration type ([basic.compound]) the trait is
43920     true, else it is false.
43921
43922`__is_literal_type (type)'
43923     If `type' is a literal type ([basic.types]) the trait is true,
43924     else it is false.  Requires: `type' shall be a complete type,
43925     (possibly cv-qualified) `void', or an array of unknown bound.
43926
43927`__is_pod (type)'
43928     If `type' is a cv POD type ([basic.types]) then the trait is true,
43929     else it is false.  Requires: `type' shall be a complete type,
43930     (possibly cv-qualified) `void', or an array of unknown bound.
43931
43932`__is_polymorphic (type)'
43933     If `type' is a polymorphic class ([class.virtual]) then the trait
43934     is true, else it is false.  Requires: `type' shall be a complete
43935     type, (possibly cv-qualified) `void', or an array of unknown bound.
43936
43937`__is_standard_layout (type)'
43938     If `type' is a standard-layout type ([basic.types]) the trait is
43939     true, else it is false.  Requires: `type' shall be a complete
43940     type, (possibly cv-qualified) `void', or an array of unknown bound.
43941
43942`__is_trivial (type)'
43943     If `type' is a trivial type ([basic.types]) the trait is true,
43944     else it is false.  Requires: `type' shall be a complete type,
43945     (possibly cv-qualified) `void', or an array of unknown bound.
43946
43947`__is_union (type)'
43948     If `type' is a cv union type ([basic.compound]) the trait is true,
43949     else it is false.
43950
43951`__underlying_type (type)'
43952     The underlying type of `type'.  Requires: `type' shall be an
43953     enumeration type ([dcl.enum]).
43954
43955
43956
43957File: gcc.info,  Node: Java Exceptions,  Next: Deprecated Features,  Prev: Type Traits,  Up: C++ Extensions
43958
439597.11 Java Exceptions
43960====================
43961
43962The Java language uses a slightly different exception handling model
43963from C++.  Normally, GNU C++ automatically detects when you are writing
43964C++ code that uses Java exceptions, and handle them appropriately.
43965However, if C++ code only needs to execute destructors when Java
43966exceptions are thrown through it, GCC guesses incorrectly.  Sample
43967problematic code is:
43968
43969       struct S { ~S(); };
43970       extern void bar();    // is written in Java, and may throw exceptions
43971       void foo()
43972       {
43973         S s;
43974         bar();
43975       }
43976
43977The usual effect of an incorrect guess is a link failure, complaining of
43978a missing routine called `__gxx_personality_v0'.
43979
43980 You can inform the compiler that Java exceptions are to be used in a
43981translation unit, irrespective of what it might think, by writing
43982`#pragma GCC java_exceptions' at the head of the file.  This `#pragma'
43983must appear before any functions that throw or catch exceptions, or run
43984destructors when exceptions are thrown through them.
43985
43986 You cannot mix Java and C++ exceptions in the same translation unit.
43987It is believed to be safe to throw a C++ exception from one file through
43988another file compiled for the Java exception model, or vice versa, but
43989there may be bugs in this area.
43990
43991
43992File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: Java Exceptions,  Up: C++ Extensions
43993
439947.12 Deprecated Features
43995========================
43996
43997In the past, the GNU C++ compiler was extended to experiment with new
43998features, at a time when the C++ language was still evolving.  Now that
43999the C++ standard is complete, some of those features are superseded by
44000superior alternatives.  Using the old features might cause a warning in
44001some cases that the feature will be dropped in the future.  In other
44002cases, the feature might be gone already.
44003
44004 While the list below is not exhaustive, it documents some of the
44005options that are now deprecated:
44006
44007`-fexternal-templates'
44008`-falt-external-templates'
44009     These are two of the many ways for G++ to implement template
44010     instantiation.  *Note Template Instantiation::.  The C++ standard
44011     clearly defines how template definitions have to be organized
44012     across implementation units.  G++ has an implicit instantiation
44013     mechanism that should work just fine for standard-conforming code.
44014
44015`-fstrict-prototype'
44016`-fno-strict-prototype'
44017     Previously it was possible to use an empty prototype parameter
44018     list to indicate an unspecified number of parameters (like C),
44019     rather than no parameters, as C++ demands.  This feature has been
44020     removed, except where it is required for backwards compatibility.
44021     *Note Backwards Compatibility::.
44022
44023 G++ allows a virtual function returning `void *' to be overridden by
44024one returning a different pointer type.  This extension to the
44025covariant return type rules is now deprecated and will be removed from a
44026future version.
44027
44028 The G++ minimum and maximum operators (`<?' and `>?') and their
44029compound forms (`<?=') and `>?=') have been deprecated and are now
44030removed from G++.  Code using these operators should be modified to use
44031`std::min' and `std::max' instead.
44032
44033 The named return value extension has been deprecated, and is now
44034removed from G++.
44035
44036 The use of initializer lists with new expressions has been deprecated,
44037and is now removed from G++.
44038
44039 Floating and complex non-type template parameters have been deprecated,
44040and are now removed from G++.
44041
44042 The implicit typename extension has been deprecated and is now removed
44043from G++.
44044
44045 The use of default arguments in function pointers, function typedefs
44046and other places where they are not permitted by the standard is
44047deprecated and will be removed from a future version of G++.
44048
44049 G++ allows floating-point literals to appear in integral constant
44050expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is
44051deprecated and will be removed from a future version.
44052
44053 G++ allows static data members of const floating-point type to be
44054declared with an initializer in a class definition. The standard only
44055allows initializers for static members of const integral types and const
44056enumeration types so this extension has been deprecated and will be
44057removed from a future version.
44058
44059
44060File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions
44061
440627.13 Backwards Compatibility
44063============================
44064
44065Now that there is a definitive ISO standard C++, G++ has a specification
44066to adhere to.  The C++ language evolved over time, and features that
44067used to be acceptable in previous drafts of the standard, such as the
44068ARM [Annotated C++ Reference Manual], are no longer accepted.  In order
44069to allow compilation of C++ written to such drafts, G++ contains some
44070backwards compatibilities.  _All such backwards compatibility features
44071are liable to disappear in future versions of G++._ They should be
44072considered deprecated.   *Note Deprecated Features::.
44073
44074`For scope'
44075     If a variable is declared at for scope, it used to remain in scope
44076     until the end of the scope that contained the for statement
44077     (rather than just within the for scope).  G++ retains this, but
44078     issues a warning, if such a variable is accessed outside the for
44079     scope.
44080
44081`Implicit C language'
44082     Old C system header files did not contain an `extern "C" {...}'
44083     scope to set the language.  On such systems, all header files are
44084     implicitly scoped inside a C language scope.  Also, an empty
44085     prototype `()' is treated as an unspecified number of arguments,
44086     rather than no arguments, as C++ demands.
44087
44088
44089File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
44090
440918 GNU Objective-C features
44092**************************
44093
44094This document is meant to describe some of the GNU Objective-C
44095features.  It is not intended to teach you Objective-C.  There are
44096several resources on the Internet that present the language.
44097
44098* Menu:
44099
44100* GNU Objective-C runtime API::
44101* Executing code before main::
44102* Type encoding::
44103* Garbage Collection::
44104* Constant string objects::
44105* compatibility_alias::
44106* Exceptions::
44107* Synchronization::
44108* Fast enumeration::
44109* Messaging with the GNU Objective-C runtime::
44110
44111
44112File: gcc.info,  Node: GNU Objective-C runtime API,  Next: Executing code before main,  Up: Objective-C
44113
441148.1 GNU Objective-C runtime API
44115===============================
44116
44117This section is specific for the GNU Objective-C runtime.  If you are
44118using a different runtime, you can skip it.
44119
44120 The GNU Objective-C runtime provides an API that allows you to
44121interact with the Objective-C runtime system, querying the live runtime
44122structures and even manipulating them.  This allows you for example to
44123inspect and navigate classes, methods and protocols; to define new
44124classes or new methods, and even to modify existing classes or
44125protocols.
44126
44127 If you are using a "Foundation" library such as GNUstep-Base, this
44128library will provide you with a rich set of functionality to do most of
44129the inspection tasks, and you probably will only need direct access to
44130the GNU Objective-C runtime API to define new classes or methods.
44131
44132* Menu:
44133
44134* Modern GNU Objective-C runtime API::
44135* Traditional GNU Objective-C runtime API::
44136
44137
44138File: gcc.info,  Node: Modern GNU Objective-C runtime API,  Next: Traditional GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
44139
441408.1.1 Modern GNU Objective-C runtime API
44141----------------------------------------
44142
44143The GNU Objective-C runtime provides an API which is similar to the one
44144provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime.  The
44145API is documented in the public header files of the GNU Objective-C
44146runtime:
44147
44148   * `objc/objc.h': this is the basic Objective-C header file, defining
44149     the basic Objective-C types such as `id', `Class' and `BOOL'.  You
44150     have to include this header to do almost anything with Objective-C.
44151
44152   * `objc/runtime.h': this header declares most of the public runtime
44153     API functions allowing you to inspect and manipulate the
44154     Objective-C runtime data structures.  These functions are fairly
44155     standardized across Objective-C runtimes and are almost identical
44156     to the Apple/NeXT Objective-C runtime ones.  It does not declare
44157     functions in some specialized areas (constructing and forwarding
44158     message invocations, threading) which are in the other headers
44159     below.  You have to include `objc/objc.h' and `objc/runtime.h' to
44160     use any of the functions, such as `class_getName()', declared in
44161     `objc/runtime.h'.
44162
44163   * `objc/message.h': this header declares public functions used to
44164     construct, deconstruct and forward message invocations.  Because
44165     messaging is done in quite a different way on different runtimes,
44166     functions in this header are specific to the GNU Objective-C
44167     runtime implementation.
44168
44169   * `objc/objc-exception.h': this header declares some public
44170     functions related to Objective-C exceptions.  For example
44171     functions in this header allow you to throw an Objective-C
44172     exception from plain C/C++ code.
44173
44174   * `objc/objc-sync.h': this header declares some public functions
44175     related to the Objective-C `@synchronized()' syntax, allowing you
44176     to emulate an Objective-C `@synchronized()' block in plain C/C++
44177     code.
44178
44179   * `objc/thr.h': this header declares a public runtime API threading
44180     layer that is only provided by the GNU Objective-C runtime.  It
44181     declares functions such as `objc_mutex_lock()', which provide a
44182     platform-independent set of threading functions.
44183
44184
44185 The header files contain detailed documentation for each function in
44186the GNU Objective-C runtime API.
44187
44188
44189File: gcc.info,  Node: Traditional GNU Objective-C runtime API,  Prev: Modern GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
44190
441918.1.2 Traditional GNU Objective-C runtime API
44192---------------------------------------------
44193
44194The GNU Objective-C runtime used to provide a different API, which we
44195call the "traditional" GNU Objective-C runtime API.  Functions
44196belonging to this API are easy to recognize because they use a
44197different naming convention, such as `class_get_super_class()'
44198(traditional API) instead of `class_getSuperclass()' (modern API).
44199Software using this API includes the file `objc/objc-api.h' where it is
44200declared.
44201
44202 Starting with GCC 4.7.0, the traditional GNU runtime API is no longer
44203available.
44204
44205
44206File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: GNU Objective-C runtime API,  Up: Objective-C
44207
442088.2 `+load': Executing code before main
44209=======================================
44210
44211This section is specific for the GNU Objective-C runtime.  If you are
44212using a different runtime, you can skip it.
44213
44214 The GNU Objective-C runtime provides a way that allows you to execute
44215code before the execution of the program enters the `main' function.
44216The code is executed on a per-class and a per-category basis, through a
44217special class method `+load'.
44218
44219 This facility is very useful if you want to initialize global variables
44220which can be accessed by the program directly, without sending a message
44221to the class first.  The usual way to initialize global variables, in
44222the `+initialize' method, might not be useful because `+initialize' is
44223only called when the first message is sent to a class object, which in
44224some cases could be too late.
44225
44226 Suppose for example you have a `FileStream' class that declares
44227`Stdin', `Stdout' and `Stderr' as global variables, like below:
44228
44229
44230     FileStream *Stdin = nil;
44231     FileStream *Stdout = nil;
44232     FileStream *Stderr = nil;
44233
44234     @implementation FileStream
44235
44236     + (void)initialize
44237     {
44238         Stdin = [[FileStream new] initWithFd:0];
44239         Stdout = [[FileStream new] initWithFd:1];
44240         Stderr = [[FileStream new] initWithFd:2];
44241     }
44242
44243     /* Other methods here */
44244     @end
44245
44246 In this example, the initialization of `Stdin', `Stdout' and `Stderr'
44247in `+initialize' occurs too late.  The programmer can send a message to
44248one of these objects before the variables are actually initialized,
44249thus sending messages to the `nil' object.  The `+initialize' method
44250which actually initializes the global variables is not invoked until
44251the first message is sent to the class object.  The solution would
44252require these variables to be initialized just before entering `main'.
44253
44254 The correct solution of the above problem is to use the `+load' method
44255instead of `+initialize':
44256
44257
44258     @implementation FileStream
44259
44260     + (void)load
44261     {
44262         Stdin = [[FileStream new] initWithFd:0];
44263         Stdout = [[FileStream new] initWithFd:1];
44264         Stderr = [[FileStream new] initWithFd:2];
44265     }
44266
44267     /* Other methods here */
44268     @end
44269
44270 The `+load' is a method that is not overridden by categories.  If a
44271class and a category of it both implement `+load', both methods are
44272invoked.  This allows some additional initializations to be performed in
44273a category.
44274
44275 This mechanism is not intended to be a replacement for `+initialize'.
44276You should be aware of its limitations when you decide to use it
44277instead of `+initialize'.
44278
44279* Menu:
44280
44281* What you can and what you cannot do in +load::
44282
44283
44284File: gcc.info,  Node: What you can and what you cannot do in +load,  Up: Executing code before main
44285
442868.2.1 What you can and what you cannot do in `+load'
44287----------------------------------------------------
44288
44289`+load' is to be used only as a last resort.  Because it is executed
44290very early, most of the Objective-C runtime machinery will not be ready
44291when `+load' is executed; hence `+load' works best for executing C code
44292that is independent on the Objective-C runtime.
44293
44294 The `+load' implementation in the GNU runtime guarantees you the
44295following things:
44296
44297   * you can write whatever C code you like;
44298
44299   * you can allocate and send messages to objects whose class is
44300     implemented in the same file;
44301
44302   * the `+load' implementation of all super classes of a class are
44303     executed before the `+load' of that class is executed;
44304
44305   * the `+load' implementation of a class is executed before the
44306     `+load' implementation of any category.
44307
44308
44309 In particular, the following things, even if they can work in a
44310particular case, are not guaranteed:
44311
44312   * allocation of or sending messages to arbitrary objects;
44313
44314   * allocation of or sending messages to objects whose classes have a
44315     category implemented in the same file;
44316
44317   * sending messages to Objective-C constant strings (`@"this is a
44318     constant string"');
44319
44320
44321 You should make no assumptions about receiving `+load' in sibling
44322classes when you write `+load' of a class.  The order in which sibling
44323classes receive `+load' is not guaranteed.
44324
44325 The order in which `+load' and `+initialize' are called could be
44326problematic if this matters.  If you don't allocate objects inside
44327`+load', it is guaranteed that `+load' is called before `+initialize'.
44328If you create an object inside `+load' the `+initialize' method of
44329object's class is invoked even if `+load' was not invoked.  Note if you
44330explicitly call `+load' on a class, `+initialize' will be called first.
44331To avoid possible problems try to implement only one of these methods.
44332
44333 The `+load' method is also invoked when a bundle is dynamically loaded
44334into your running program.  This happens automatically without any
44335intervening operation from you.  When you write bundles and you need to
44336write `+load' you can safely create and send messages to objects whose
44337classes already exist in the running program.  The same restrictions as
44338above apply to classes defined in bundle.
44339
44340
44341File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C
44342
443438.3 Type encoding
44344=================
44345
44346This is an advanced section.  Type encodings are used extensively by
44347the compiler and by the runtime, but you generally do not need to know
44348about them to use Objective-C.
44349
44350 The Objective-C compiler generates type encodings for all the types.
44351These type encodings are used at runtime to find out information about
44352selectors and methods and about objects and classes.
44353
44354 The types are encoded in the following way:
44355
44356`_Bool'            `B'
44357`char'             `c'
44358`unsigned char'    `C'
44359`short'            `s'
44360`unsigned short'   `S'
44361`int'              `i'
44362`unsigned int'     `I'
44363`long'             `l'
44364`unsigned long'    `L'
44365`long long'        `q'
44366`unsigned long     `Q'
44367long'
44368`float'            `f'
44369`double'           `d'
44370`long double'      `D'
44371`void'             `v'
44372`id'               `@'
44373`Class'            `#'
44374`SEL'              `:'
44375`char*'            `*'
44376`enum'             an `enum' is encoded exactly as the integer type that
44377                   the compiler uses for it, which depends on the
44378                   enumeration values.  Often the compiler users
44379                   `unsigned int', which is then encoded as `I'.
44380unknown type       `?'
44381Complex types      `j' followed by the inner type.  For example
44382                   `_Complex double' is encoded as "jd".
44383bit-fields         `b' followed by the starting position of the
44384                   bit-field, the type of the bit-field and the size of
44385                   the bit-field (the bit-fields encoding was changed
44386                   from the NeXT's compiler encoding, see below)
44387
44388 The encoding of bit-fields has changed to allow bit-fields to be
44389properly handled by the runtime functions that compute sizes and
44390alignments of types that contain bit-fields.  The previous encoding
44391contained only the size of the bit-field.  Using only this information
44392it is not possible to reliably compute the size occupied by the
44393bit-field.  This is very important in the presence of the Boehm's
44394garbage collector because the objects are allocated using the typed
44395memory facility available in this collector.  The typed memory
44396allocation requires information about where the pointers are located
44397inside the object.
44398
44399 The position in the bit-field is the position, counting in bits, of the
44400bit closest to the beginning of the structure.
44401
44402 The non-atomic types are encoded as follows:
44403
44404pointers       `^' followed by the pointed type.
44405arrays         `[' followed by the number of elements in the array
44406               followed by the type of the elements followed by `]'
44407structures     `{' followed by the name of the structure (or `?' if the
44408               structure is unnamed), the `=' sign, the type of the
44409               members and by `}'
44410unions         `(' followed by the name of the structure (or `?' if the
44411               union is unnamed), the `=' sign, the type of the members
44412               followed by `)'
44413vectors        `![' followed by the vector_size (the number of bytes
44414               composing the vector) followed by a comma, followed by
44415               the alignment (in bytes) of the vector, followed by the
44416               type of the elements followed by `]'
44417
44418 Here are some types and their encodings, as they are generated by the
44419compiler on an i386 machine:
44420
44421
44422Objective-C type   Compiler encoding
44423     int a[10];    `[10i]'
44424     struct {      `{?=i[3f]b128i3b131i2c}'
44425       int i;
44426       float f[3];
44427       int a:3;
44428       int b:2;
44429       char c;
44430     }
44431     int a __attribute__ ((vector_size (16)));`![16,16i]' (alignment would depend on the machine)
44432
44433
44434 In addition to the types the compiler also encodes the type
44435specifiers.  The table below describes the encoding of the current
44436Objective-C type specifiers:
44437
44438
44439Specifier          Encoding
44440`const'            `r'
44441`in'               `n'
44442`inout'            `N'
44443`out'              `o'
44444`bycopy'           `O'
44445`byref'            `R'
44446`oneway'           `V'
44447
44448
44449 The type specifiers are encoded just before the type.  Unlike types
44450however, the type specifiers are only encoded when they appear in method
44451argument types.
44452
44453 Note how `const' interacts with pointers:
44454
44455
44456Objective-C type   Compiler encoding
44457     const int     `ri'
44458     const int*    `^ri'
44459     int *const    `r^i'
44460
44461
44462 `const int*' is a pointer to a `const int', and so is encoded as
44463`^ri'.  `int* const', instead, is a `const' pointer to an `int', and so
44464is encoded as `r^i'.
44465
44466 Finally, there is a complication when encoding `const char *' versus
44467`char * const'.  Because `char *' is encoded as `*' and not as `^c',
44468there is no way to express the fact that `r' applies to the pointer or
44469to the pointee.
44470
44471 Hence, it is assumed as a convention that `r*' means `const char *'
44472(since it is what is most often meant), and there is no way to encode
44473`char *const'.  `char *const' would simply be encoded as `*', and the
44474`const' is lost.
44475
44476* Menu:
44477
44478* Legacy type encoding::
44479* @encode::
44480* Method signatures::
44481
44482
44483File: gcc.info,  Node: Legacy type encoding,  Next: @encode,  Up: Type encoding
44484
444858.3.1 Legacy type encoding
44486--------------------------
44487
44488Unfortunately, historically GCC used to have a number of bugs in its
44489encoding code.  The NeXT runtime expects GCC to emit type encodings in
44490this historical format (compatible with GCC-3.3), so when using the
44491NeXT runtime, GCC will introduce on purpose a number of incorrect
44492encodings:
44493
44494   * the read-only qualifier of the pointee gets emitted before the '^'.
44495     The read-only qualifier of the pointer itself gets ignored, unless
44496     it is a typedef.  Also, the 'r' is only emitted for the outermost
44497     type.
44498
44499   * 32-bit longs are encoded as 'l' or 'L', but not always.  For
44500     typedefs, the compiler uses 'i' or 'I' instead if encoding a
44501     struct field or a pointer.
44502
44503   * `enum's are always encoded as 'i' (int) even if they are actually
44504     unsigned or long.
44505
44506
44507 In addition to that, the NeXT runtime uses a different encoding for
44508bitfields.  It encodes them as `b' followed by the size, without a bit
44509offset or the underlying field type.
44510
44511
44512File: gcc.info,  Node: @encode,  Next: Method signatures,  Prev: Legacy type encoding,  Up: Type encoding
44513
445148.3.2 @encode
44515-------------
44516
44517GNU Objective-C supports the `@encode' syntax that allows you to create
44518a type encoding from a C/Objective-C type.  For example, `@encode(int)'
44519is compiled by the compiler into `"i"'.
44520
44521 `@encode' does not support type qualifiers other than `const'.  For
44522example, `@encode(const char*)' is valid and is compiled into `"r*"',
44523while `@encode(bycopy char *)' is invalid and will cause a compilation
44524error.
44525
44526
44527File: gcc.info,  Node: Method signatures,  Prev: @encode,  Up: Type encoding
44528
445298.3.3 Method signatures
44530-----------------------
44531
44532This section documents the encoding of method types, which is rarely
44533needed to use Objective-C.  You should skip it at a first reading; the
44534runtime provides functions that will work on methods and can walk
44535through the list of parameters and interpret them for you.  These
44536functions are part of the public "API" and are the preferred way to
44537interact with method signatures from user code.
44538
44539 But if you need to debug a problem with method signatures and need to
44540know how they are implemented (i.e., the "ABI"), read on.
44541
44542 Methods have their "signature" encoded and made available to the
44543runtime.  The "signature" encodes all the information required to
44544dynamically build invocations of the method at runtime: return type and
44545arguments.
44546
44547 The "signature" is a null-terminated string, composed of the following:
44548
44549   * The return type, including type qualifiers.  For example, a method
44550     returning `int' would have `i' here.
44551
44552   * The total size (in bytes) required to pass all the parameters.
44553     This includes the two hidden parameters (the object `self' and the
44554     method selector `_cmd').
44555
44556   * Each argument, with the type encoding, followed by the offset (in
44557     bytes) of the argument in the list of parameters.
44558
44559
44560 For example, a method with no arguments and returning `int' would have
44561the signature `i8@0:4' if the size of a pointer is 4.  The signature is
44562interpreted as follows: the `i' is the return type (an `int'), the `8'
44563is the total size of the parameters in bytes (two pointers each of size
445644), the `@0' is the first parameter (an object at byte offset `0') and
44565`:4' is the second parameter (a `SEL' at byte offset `4').
44566
44567 You can easily find more examples by running the "strings" program on
44568an Objective-C object file compiled by GCC.  You'll see a lot of
44569strings that look very much like `i8@0:4'.  They are signatures of
44570Objective-C methods.
44571
44572
44573File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C
44574
445758.4 Garbage Collection
44576======================
44577
44578This section is specific for the GNU Objective-C runtime.  If you are
44579using a different runtime, you can skip it.
44580
44581 Support for garbage collection with the GNU runtime has been added by
44582using a powerful conservative garbage collector, known as the
44583Boehm-Demers-Weiser conservative garbage collector.
44584
44585 To enable the support for it you have to configure the compiler using
44586an additional argument, `--enable-objc-gc'.  This will build the
44587boehm-gc library, and build an additional runtime library which has
44588several enhancements to support the garbage collector.  The new library
44589has a new name, `libobjc_gc.a' to not conflict with the
44590non-garbage-collected library.
44591
44592 When the garbage collector is used, the objects are allocated using the
44593so-called typed memory allocation mechanism available in the
44594Boehm-Demers-Weiser collector.  This mode requires precise information
44595on where pointers are located inside objects.  This information is
44596computed once per class, immediately after the class has been
44597initialized.
44598
44599 There is a new runtime function `class_ivar_set_gcinvisible()' which
44600can be used to declare a so-called "weak pointer" reference.  Such a
44601pointer is basically hidden for the garbage collector; this can be
44602useful in certain situations, especially when you want to keep track of
44603the allocated objects, yet allow them to be collected.  This kind of
44604pointers can only be members of objects, you cannot declare a global
44605pointer as a weak reference.  Every type which is a pointer type can be
44606declared a weak pointer, including `id', `Class' and `SEL'.
44607
44608 Here is an example of how to use this feature.  Suppose you want to
44609implement a class whose instances hold a weak pointer reference; the
44610following class does this:
44611
44612
44613     @interface WeakPointer : Object
44614     {
44615         const void* weakPointer;
44616     }
44617
44618     - initWithPointer:(const void*)p;
44619     - (const void*)weakPointer;
44620     @end
44621
44622
44623     @implementation WeakPointer
44624
44625     + (void)initialize
44626     {
44627       if (self == objc_lookUpClass ("WeakPointer"))
44628         class_ivar_set_gcinvisible (self, "weakPointer", YES);
44629     }
44630
44631     - initWithPointer:(const void*)p
44632     {
44633       weakPointer = p;
44634       return self;
44635     }
44636
44637     - (const void*)weakPointer
44638     {
44639       return weakPointer;
44640     }
44641
44642     @end
44643
44644 Weak pointers are supported through a new type character specifier
44645represented by the `!' character.  The `class_ivar_set_gcinvisible()'
44646function adds or removes this specifier to the string type description
44647of the instance variable named as argument.
44648
44649
44650File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C
44651
446528.5 Constant string objects
44653===========================
44654
44655GNU Objective-C provides constant string objects that are generated
44656directly by the compiler.  You declare a constant string object by
44657prefixing a C constant string with the character `@':
44658
44659       id myString = @"this is a constant string object";
44660
44661 The constant string objects are by default instances of the
44662`NXConstantString' class which is provided by the GNU Objective-C
44663runtime.  To get the definition of this class you must include the
44664`objc/NXConstStr.h' header file.
44665
44666 User defined libraries may want to implement their own constant string
44667class.  To be able to support them, the GNU Objective-C compiler
44668provides a new command line options
44669`-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
44670to a strict structure, the same as `NXConstantString''s structure:
44671
44672
44673     @interface MyConstantStringClass
44674     {
44675       Class isa;
44676       char *c_string;
44677       unsigned int len;
44678     }
44679     @end
44680
44681 `NXConstantString' inherits from `Object'; user class libraries may
44682choose to inherit the customized constant string class from a different
44683class than `Object'.  There is no requirement in the methods the
44684constant string class has to implement, but the final ivar layout of
44685the class must be the compatible with the given structure.
44686
44687 When the compiler creates the statically allocated constant string
44688object, the `c_string' field will be filled by the compiler with the
44689string; the `length' field will be filled by the compiler with the
44690string length; the `isa' pointer will be filled with `NULL' by the
44691compiler, and it will later be fixed up automatically at runtime by the
44692GNU Objective-C runtime library to point to the class which was set by
44693the `-fconstant-string-class' option when the object file is loaded (if
44694you wonder how it works behind the scenes, the name of the class to
44695use, and the list of static objects to fixup, are stored by the
44696compiler in the object file in a place where the GNU runtime library
44697will find them at runtime).
44698
44699 As a result, when a file is compiled with the
44700`-fconstant-string-class' option, all the constant string objects will
44701be instances of the class specified as argument to this option.  It is
44702possible to have multiple compilation units referring to different
44703constant string classes, neither the compiler nor the linker impose any
44704restrictions in doing this.
44705
44706
44707File: gcc.info,  Node: compatibility_alias,  Next: Exceptions,  Prev: Constant string objects,  Up: Objective-C
44708
447098.6 compatibility_alias
44710=======================
44711
44712The keyword `@compatibility_alias' allows you to define a class name as
44713equivalent to another class name.  For example:
44714
44715     @compatibility_alias WOApplication GSWApplication;
44716
44717 tells the compiler that each time it encounters `WOApplication' as a
44718class name, it should replace it with `GSWApplication' (that is,
44719`WOApplication' is just an alias for `GSWApplication').
44720
44721 There are some constraints on how this can be used--
44722
44723   * `WOApplication' (the alias) must not be an existing class;
44724
44725   * `GSWApplication' (the real class) must be an existing class.
44726
44727
44728
44729File: gcc.info,  Node: Exceptions,  Next: Synchronization,  Prev: compatibility_alias,  Up: Objective-C
44730
447318.7 Exceptions
44732==============
44733
44734GNU Objective-C provides exception support built into the language, as
44735in the following example:
44736
44737       @try {
44738         ...
44739            @throw expr;
44740         ...
44741       }
44742       @catch (AnObjCClass *exc) {
44743         ...
44744           @throw expr;
44745         ...
44746           @throw;
44747         ...
44748       }
44749       @catch (AnotherClass *exc) {
44750         ...
44751       }
44752       @catch (id allOthers) {
44753         ...
44754       }
44755       @finally {
44756         ...
44757           @throw expr;
44758         ...
44759       }
44760
44761 The `@throw' statement may appear anywhere in an Objective-C or
44762Objective-C++ program; when used inside of a `@catch' block, the
44763`@throw' may appear without an argument (as shown above), in which case
44764the object caught by the `@catch' will be rethrown.
44765
44766 Note that only (pointers to) Objective-C objects may be thrown and
44767caught using this scheme.  When an object is thrown, it will be caught
44768by the nearest `@catch' clause capable of handling objects of that
44769type, analogously to how `catch' blocks work in C++ and Java.  A
44770`@catch(id ...)' clause (as shown above) may also be provided to catch
44771any and all Objective-C exceptions not caught by previous `@catch'
44772clauses (if any).
44773
44774 The `@finally' clause, if present, will be executed upon exit from the
44775immediately preceding `@try ... @catch' section.  This will happen
44776regardless of whether any exceptions are thrown, caught or rethrown
44777inside the `@try ... @catch' section, analogously to the behavior of
44778the `finally' clause in Java.
44779
44780 There are several caveats to using the new exception mechanism:
44781
44782   * The `-fobjc-exceptions' command line option must be used when
44783     compiling Objective-C files that use exceptions.
44784
44785   * With the GNU runtime, exceptions are always implemented as "native"
44786     exceptions and it is recommended that the `-fexceptions' and
44787     `-shared-libgcc' options are used when linking.
44788
44789   * With the NeXT runtime, although currently designed to be binary
44790     compatible with `NS_HANDLER'-style idioms provided by the
44791     `NSException' class, the new exceptions can only be used on Mac OS
44792     X 10.3 (Panther) and later systems, due to additional functionality
44793     needed in the NeXT Objective-C runtime.
44794
44795   * As mentioned above, the new exceptions do not support handling
44796     types other than Objective-C objects.   Furthermore, when used from
44797     Objective-C++, the Objective-C exception model does not
44798     interoperate with C++ exceptions at this time.  This means you
44799     cannot `@throw' an exception from Objective-C and `catch' it in
44800     C++, or vice versa (i.e., `throw ... @catch').
44801
44802
44803File: gcc.info,  Node: Synchronization,  Next: Fast enumeration,  Prev: Exceptions,  Up: Objective-C
44804
448058.8 Synchronization
44806===================
44807
44808GNU Objective-C provides support for synchronized blocks:
44809
44810       @synchronized (ObjCClass *guard) {
44811         ...
44812       }
44813
44814 Upon entering the `@synchronized' block, a thread of execution shall
44815first check whether a lock has been placed on the corresponding `guard'
44816object by another thread.  If it has, the current thread shall wait
44817until the other thread relinquishes its lock.  Once `guard' becomes
44818available, the current thread will place its own lock on it, execute
44819the code contained in the `@synchronized' block, and finally relinquish
44820the lock (thereby making `guard' available to other threads).
44821
44822 Unlike Java, Objective-C does not allow for entire methods to be
44823marked `@synchronized'.  Note that throwing exceptions out of
44824`@synchronized' blocks is allowed, and will cause the guarding object
44825to be unlocked properly.
44826
44827 Because of the interactions between synchronization and exception
44828handling, you can only use `@synchronized' when compiling with
44829exceptions enabled, that is with the command line option
44830`-fobjc-exceptions'.
44831
44832
44833File: gcc.info,  Node: Fast enumeration,  Next: Messaging with the GNU Objective-C runtime,  Prev: Synchronization,  Up: Objective-C
44834
448358.9 Fast enumeration
44836====================
44837
44838* Menu:
44839
44840* Using fast enumeration::
44841* c99-like fast enumeration syntax::
44842* Fast enumeration details::
44843* Fast enumeration protocol::
44844
44845
44846File: gcc.info,  Node: Using fast enumeration,  Next: c99-like fast enumeration syntax,  Up: Fast enumeration
44847
448488.9.1 Using fast enumeration
44849----------------------------
44850
44851GNU Objective-C provides support for the fast enumeration syntax:
44852
44853       id array = ...;
44854       id object;
44855
44856       for (object in array)
44857       {
44858         /* Do something with 'object' */
44859       }
44860
44861 `array' needs to be an Objective-C object (usually a collection
44862object, for example an array, a dictionary or a set) which implements
44863the "Fast Enumeration Protocol" (see below).  If you are using a
44864Foundation library such as GNUstep Base or Apple Cocoa Foundation, all
44865collection objects in the library implement this protocol and can be
44866used in this way.
44867
44868 The code above would iterate over all objects in `array'.  For each of
44869them, it assigns it to `object', then executes the `Do something with
44870'object'' statements.
44871
44872 Here is a fully worked-out example using a Foundation library (which
44873provides the implementation of `NSArray', `NSString' and `NSLog'):
44874
44875       NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil];
44876       NSString *object;
44877
44878       for (object in array)
44879         NSLog (@"Iterating over %@", object);
44880
44881
44882File: gcc.info,  Node: c99-like fast enumeration syntax,  Next: Fast enumeration details,  Prev: Using fast enumeration,  Up: Fast enumeration
44883
448848.9.2 c99-like fast enumeration syntax
44885--------------------------------------
44886
44887A c99-like declaration syntax is also allowed:
44888
44889       id array = ...;
44890
44891       for (id object in array)
44892       {
44893         /* Do something with 'object'  */
44894       }
44895
44896 this is completely equivalent to:
44897
44898       id array = ...;
44899
44900       {
44901         id object;
44902         for (object in array)
44903         {
44904           /* Do something with 'object'  */
44905         }
44906       }
44907
44908 but can save some typing.
44909
44910 Note that the option `-std=c99' is not required to allow this syntax
44911in Objective-C.
44912
44913
44914File: gcc.info,  Node: Fast enumeration details,  Next: Fast enumeration protocol,  Prev: c99-like fast enumeration syntax,  Up: Fast enumeration
44915
449168.9.3 Fast enumeration details
44917------------------------------
44918
44919Here is a more technical description with the gory details.  Consider
44920the code
44921
44922       for (OBJECT EXPRESSION in COLLECTION EXPRESSION)
44923       {
44924         STATEMENTS
44925       }
44926
44927 here is what happens when you run it:
44928
44929   * `COLLECTION EXPRESSION' is evaluated exactly once and the result
44930     is used as the collection object to iterate over.  This means it
44931     is safe to write code such as `for (object in [NSDictionary
44932     keyEnumerator]) ...'.
44933
44934   * the iteration is implemented by the compiler by repeatedly getting
44935     batches of objects from the collection object using the fast
44936     enumeration protocol (see below), then iterating over all objects
44937     in the batch.  This is faster than a normal enumeration where
44938     objects are retrieved one by one (hence the name "fast
44939     enumeration").
44940
44941   * if there are no objects in the collection, then `OBJECT
44942     EXPRESSION' is set to `nil' and the loop immediately terminates.
44943
44944   * if there are objects in the collection, then for each object in the
44945     collection (in the order they are returned) `OBJECT EXPRESSION' is
44946     set to the object, then `STATEMENTS' are executed.
44947
44948   * `STATEMENTS' can contain `break' and `continue' commands, which
44949     will abort the iteration or skip to the next loop iteration as
44950     expected.
44951
44952   * when the iteration ends because there are no more objects to
44953     iterate over, `OBJECT EXPRESSION' is set to `nil'.  This allows
44954     you to determine whether the iteration finished because a `break'
44955     command was used (in which case `OBJECT EXPRESSION' will remain
44956     set to the last object that was iterated over) or because it
44957     iterated over all the objects (in which case `OBJECT EXPRESSION'
44958     will be set to `nil').
44959
44960   * `STATEMENTS' must not make any changes to the collection object;
44961     if they do, it is a hard error and the fast enumeration terminates
44962     by invoking `objc_enumerationMutation', a runtime function that
44963     normally aborts the program but which can be customized by
44964     Foundation libraries via `objc_set_mutation_handler' to do
44965     something different, such as raising an exception.
44966
44967
44968
44969File: gcc.info,  Node: Fast enumeration protocol,  Prev: Fast enumeration details,  Up: Fast enumeration
44970
449718.9.4 Fast enumeration protocol
44972-------------------------------
44973
44974If you want your own collection object to be usable with fast
44975enumeration, you need to have it implement the method
44976
44977     - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state
44978                                           objects: (id *)objects
44979                                             count: (unsigned long)len;
44980
44981 where `NSFastEnumerationState' must be defined in your code as follows:
44982
44983     typedef struct
44984     {
44985       unsigned long state;
44986       id            *itemsPtr;
44987       unsigned long *mutationsPtr;
44988       unsigned long extra[5];
44989     } NSFastEnumerationState;
44990
44991 If no `NSFastEnumerationState' is defined in your code, the compiler
44992will automatically replace `NSFastEnumerationState *' with `struct
44993__objcFastEnumerationState *', where that type is silently defined by
44994the compiler in an identical way.  This can be confusing and we
44995recommend that you define `NSFastEnumerationState' (as shown above)
44996instead.
44997
44998 The method is called repeatedly during a fast enumeration to retrieve
44999batches of objects.  Each invocation of the method should retrieve the
45000next batch of objects.
45001
45002 The return value of the method is the number of objects in the current
45003batch; this should not exceed `len', which is the maximum size of a
45004batch as requested by the caller.  The batch itself is returned in the
45005`itemsPtr' field of the `NSFastEnumerationState' struct.
45006
45007 To help with returning the objects, the `objects' array is a C array
45008preallocated by the caller (on the stack) of size `len'.  In many cases
45009you can put the objects you want to return in that `objects' array,
45010then do `itemsPtr = objects'.  But you don't have to; if your
45011collection already has the objects to return in some form of C array,
45012it could return them from there instead.
45013
45014 The `state' and `extra' fields of the `NSFastEnumerationState'
45015structure allows your collection object to keep track of the state of
45016the enumeration.  In a simple array implementation, `state' may keep
45017track of the index of the last object that was returned, and `extra'
45018may be unused.
45019
45020 The `mutationsPtr' field of the `NSFastEnumerationState' is used to
45021keep track of mutations.  It should point to a number; before working
45022on each object, the fast enumeration loop will check that this number
45023has not changed.  If it has, a mutation has happened and the fast
45024enumeration will abort.  So, `mutationsPtr' could be set to point to
45025some sort of version number of your collection, which is increased by
45026one every time there is a change (for example when an object is added
45027or removed).  Or, if you are content with less strict mutation checks,
45028it could point to the number of objects in your collection or some
45029other value that can be checked to perform an approximate check that
45030the collection has not been mutated.
45031
45032 Finally, note how we declared the `len' argument and the return value
45033to be of type `unsigned long'.  They could also be declared to be of
45034type `unsigned int' and everything would still work.
45035
45036
45037File: gcc.info,  Node: Messaging with the GNU Objective-C runtime,  Prev: Fast enumeration,  Up: Objective-C
45038
450398.10 Messaging with the GNU Objective-C runtime
45040===============================================
45041
45042This section is specific for the GNU Objective-C runtime.  If you are
45043using a different runtime, you can skip it.
45044
45045 The implementation of messaging in the GNU Objective-C runtime is
45046designed to be portable, and so is based on standard C.
45047
45048 Sending a message in the GNU Objective-C runtime is composed of two
45049separate steps.  First, there is a call to the lookup function,
45050`objc_msg_lookup ()' (or, in the case of messages to super,
45051`objc_msg_lookup_super ()').  This runtime function takes as argument
45052the receiver and the selector of the method to be called; it returns
45053the `IMP', that is a pointer to the function implementing the method.
45054The second step of method invocation consists of casting this pointer
45055function to the appropriate function pointer type, and calling the
45056function pointed to it with the right arguments.
45057
45058 For example, when the compiler encounters a method invocation such as
45059`[object init]', it compiles it into a call to `objc_msg_lookup
45060(object, @selector(init))' followed by a cast of the returned value to
45061the appropriate function pointer type, and then it calls it.
45062
45063* Menu:
45064
45065* Dynamically registering methods::
45066* Forwarding hook::
45067
45068
45069File: gcc.info,  Node: Dynamically registering methods,  Next: Forwarding hook,  Up: Messaging with the GNU Objective-C runtime
45070
450718.10.1 Dynamically registering methods
45072--------------------------------------
45073
45074If `objc_msg_lookup()' does not find a suitable method implementation,
45075because the receiver does not implement the required method, it tries
45076to see if the class can dynamically register the method.
45077
45078 To do so, the runtime checks if the class of the receiver implements
45079the method
45080
45081     + (BOOL) resolveInstanceMethod: (SEL)selector;
45082
45083 in the case of an instance method, or
45084
45085     + (BOOL) resolveClassMethod: (SEL)selector;
45086
45087 in the case of a class method.  If the class implements it, the
45088runtime invokes it, passing as argument the selector of the original
45089method, and if it returns `YES', the runtime tries the lookup again,
45090which could now succeed if a matching method was added dynamically by
45091`+resolveInstanceMethod:' or `+resolveClassMethod:'.
45092
45093 This allows classes to dynamically register methods (by adding them to
45094the class using `class_addMethod') when they are first called.  To do
45095so, a class should implement `+resolveInstanceMethod:' (or, depending
45096on the case, `+resolveClassMethod:') and have it recognize the
45097selectors of methods that can be registered dynamically at runtime,
45098register them, and return `YES'.  It should return `NO' for methods
45099that it does not dynamically registered at runtime.
45100
45101 If `+resolveInstanceMethod:' (or `+resolveClassMethod:') is not
45102implemented or returns `NO', the runtime then tries the forwarding hook.
45103
45104 Support for `+resolveInstanceMethod:' and `resolveClassMethod:' was
45105added to the GNU Objective-C runtime in GCC version 4.6.
45106
45107
45108File: gcc.info,  Node: Forwarding hook,  Prev: Dynamically registering methods,  Up: Messaging with the GNU Objective-C runtime
45109
451108.10.2 Forwarding hook
45111----------------------
45112
45113The GNU Objective-C runtime provides a hook, called
45114`__objc_msg_forward2', which is called by `objc_msg_lookup()' when it
45115can't find a method implementation in the runtime tables and after
45116calling `+resolveInstanceMethod:' and `+resolveClassMethod:' has been
45117attempted and did not succeed in dynamically registering the method.
45118
45119 To configure the hook, you set the global variable
45120`__objc_msg_forward2' to a function with the same argument and return
45121types of `objc_msg_lookup()'.  When `objc_msg_lookup()' can not find a
45122method implementation, it invokes the hook function you provided to get
45123a method implementation to return.  So, in practice
45124`__objc_msg_forward2' allows you to extend `objc_msg_lookup()' by
45125adding some custom code that is called to do a further lookup when no
45126standard method implementation can be found using the normal lookup.
45127
45128 This hook is generally reserved for "Foundation" libraries such as
45129GNUstep Base, which use it to implement their high-level method
45130forwarding API, typically based around the `forwardInvocation:' method.
45131So, unless you are implementing your own "Foundation" library, you
45132should not set this hook.
45133
45134 In a typical forwarding implementation, the `__objc_msg_forward2' hook
45135function determines the argument and return type of the method that is
45136being looked up, and then creates a function that takes these arguments
45137and has that return type, and returns it to the caller.  Creating this
45138function is non-trivial and is typically performed using a dedicated
45139library such as `libffi'.
45140
45141 The forwarding method implementation thus created is returned by
45142`objc_msg_lookup()' and is executed as if it was a normal method
45143implementation.  When the forwarding method implementation is called,
45144it is usually expected to pack all arguments into some sort of object
45145(typically, an `NSInvocation' in a "Foundation" library), and hand it
45146over to the programmer (`forwardInvocation:') who is then allowed to
45147manipulate the method invocation using a high-level API provided by the
45148"Foundation" library.  For example, the programmer may want to examine
45149the method invocation arguments and name and potentially change them
45150before forwarding the method invocation to one or more local objects
45151(`performInvocation:') or even to remote objects (by using Distributed
45152Objects or some other mechanism).  When all this completes, the return
45153value is passed back and must be returned correctly to the original
45154caller.
45155
45156 Note that the GNU Objective-C runtime currently provides no support
45157for method forwarding or method invocations other than the
45158`__objc_msg_forward2' hook.
45159
45160 If the forwarding hook does not exist or returns `NULL', the runtime
45161currently attempts forwarding using an older, deprecated API, and if
45162that fails, it aborts the program.  In future versions of the GNU
45163Objective-C runtime, the runtime will immediately abort.
45164
45165
45166File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top
45167
451689 Binary Compatibility
45169**********************
45170
45171Binary compatibility encompasses several related concepts:
45172
45173"application binary interface (ABI)"
45174     The set of runtime conventions followed by all of the tools that
45175     deal with binary representations of a program, including
45176     compilers, assemblers, linkers, and language runtime support.
45177     Some ABIs are formal with a written specification, possibly
45178     designed by multiple interested parties.  Others are simply the
45179     way things are actually done by a particular set of tools.
45180
45181"ABI conformance"
45182     A compiler conforms to an ABI if it generates code that follows
45183     all of the specifications enumerated by that ABI.  A library
45184     conforms to an ABI if it is implemented according to that ABI.  An
45185     application conforms to an ABI if it is built using tools that
45186     conform to that ABI and does not contain source code that
45187     specifically changes behavior specified by the ABI.
45188
45189"calling conventions"
45190     Calling conventions are a subset of an ABI that specify of how
45191     arguments are passed and function results are returned.
45192
45193"interoperability"
45194     Different sets of tools are interoperable if they generate files
45195     that can be used in the same program.  The set of tools includes
45196     compilers, assemblers, linkers, libraries, header files, startup
45197     files, and debuggers.  Binaries produced by different sets of
45198     tools are not interoperable unless they implement the same ABI.
45199     This applies to different versions of the same tools as well as
45200     tools from different vendors.
45201
45202"intercallability"
45203     Whether a function in a binary built by one set of tools can call a
45204     function in a binary built by a different set of tools is a subset
45205     of interoperability.
45206
45207"implementation-defined features"
45208     Language standards include lists of implementation-defined
45209     features whose behavior can vary from one implementation to
45210     another.  Some of these features are normally covered by a
45211     platform's ABI and others are not.  The features that are not
45212     covered by an ABI generally affect how a program behaves, but not
45213     intercallability.
45214
45215"compatibility"
45216     Conformance to the same ABI and the same behavior of
45217     implementation-defined features are both relevant for
45218     compatibility.
45219
45220 The application binary interface implemented by a C or C++ compiler
45221affects code generation and runtime support for:
45222
45223   * size and alignment of data types
45224
45225   * layout of structured types
45226
45227   * calling conventions
45228
45229   * register usage conventions
45230
45231   * interfaces for runtime arithmetic support
45232
45233   * object file formats
45234
45235 In addition, the application binary interface implemented by a C++
45236compiler affects code generation and runtime support for:
45237   * name mangling
45238
45239   * exception handling
45240
45241   * invoking constructors and destructors
45242
45243   * layout, alignment, and padding of classes
45244
45245   * layout and alignment of virtual tables
45246
45247 Some GCC compilation options cause the compiler to generate code that
45248does not conform to the platform's default ABI.  Other options cause
45249different program behavior for implementation-defined features that are
45250not covered by an ABI.  These options are provided for consistency with
45251other compilers that do not follow the platform's default ABI or the
45252usual behavior of implementation-defined features for the platform.  Be
45253very careful about using such options.
45254
45255 Most platforms have a well-defined ABI that covers C code, but ABIs
45256that cover C++ functionality are not yet common.
45257
45258 Starting with GCC 3.2, GCC binary conventions for C++ are based on a
45259written, vendor-neutral C++ ABI that was designed to be specific to
4526064-bit Itanium but also includes generic specifications that apply to
45261any platform.  This C++ ABI is also implemented by other compiler
45262vendors on some platforms, notably GNU/Linux and BSD systems.  We have
45263tried hard to provide a stable ABI that will be compatible with future
45264GCC releases, but it is possible that we will encounter problems that
45265make this difficult.  Such problems could include different
45266interpretations of the C++ ABI by different vendors, bugs in the ABI, or
45267bugs in the implementation of the ABI in different compilers.  GCC's
45268`-Wabi' switch warns when G++ generates code that is probably not
45269compatible with the C++ ABI.
45270
45271 The C++ library used with a C++ compiler includes the Standard C++
45272Library, with functionality defined in the C++ Standard, plus language
45273runtime support.  The runtime support is included in a C++ ABI, but
45274there is no formal ABI for the Standard C++ Library.  Two
45275implementations of that library are interoperable if one follows the
45276de-facto ABI of the other and if they are both built with the same
45277compiler, or with compilers that conform to the same ABI for C++
45278compiler and runtime support.
45279
45280 When G++ and another C++ compiler conform to the same C++ ABI, but the
45281implementations of the Standard C++ Library that they normally use do
45282not follow the same ABI for the Standard C++ Library, object files
45283built with those compilers can be used in the same program only if they
45284use the same C++ library.  This requires specifying the location of the
45285C++ library header files when invoking the compiler whose usual library
45286is not being used.  The location of GCC's C++ header files depends on
45287how the GCC build was configured, but can be seen by using the G++ `-v'
45288option.  With default configuration options for G++ 3.3 the compile
45289line for a different C++ compiler needs to include
45290
45291         -IGCC_INSTALL_DIRECTORY/include/c++/3.3
45292
45293 Similarly, compiling code with G++ that must use a C++ library other
45294than the GNU C++ library requires specifying the location of the header
45295files for that other library.
45296
45297 The most straightforward way to link a program to use a particular C++
45298library is to use a C++ driver that specifies that C++ library by
45299default.  The `g++' driver, for example, tells the linker where to find
45300GCC's C++ library (`libstdc++') plus the other libraries and startup
45301files it needs, in the proper order.
45302
45303 If a program must use a different C++ library and it's not possible to
45304do the final link using a C++ driver that uses that library by default,
45305it is necessary to tell `g++' the location and name of that library.
45306It might also be necessary to specify different startup files and other
45307runtime support libraries, and to suppress the use of GCC's support
45308libraries with one or more of the options `-nostdlib', `-nostartfiles',
45309and `-nodefaultlibs'.
45310
45311
45312File: gcc.info,  Node: Gcov,  Next: Trouble,  Prev: Compatibility,  Up: Top
45313
4531410 `gcov'--a Test Coverage Program
45315**********************************
45316
45317`gcov' is a tool you can use in conjunction with GCC to test code
45318coverage in your programs.
45319
45320* Menu:
45321
45322* Gcov Intro::                  Introduction to gcov.
45323* Invoking Gcov::               How to use gcov.
45324* Gcov and Optimization::       Using gcov with GCC optimization.
45325* Gcov Data Files::             The files used by gcov.
45326* Cross-profiling::             Data file relocation.
45327
45328
45329File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
45330
4533110.1 Introduction to `gcov'
45332===========================
45333
45334`gcov' is a test coverage program.  Use it in concert with GCC to
45335analyze your programs to help create more efficient, faster running
45336code and to discover untested parts of your program.  You can use
45337`gcov' as a profiling tool to help discover where your optimization
45338efforts will best affect your code.  You can also use `gcov' along with
45339the other profiling tool, `gprof', to assess which parts of your code
45340use the greatest amount of computing time.
45341
45342 Profiling tools help you analyze your code's performance.  Using a
45343profiler such as `gcov' or `gprof', you can find out some basic
45344performance statistics, such as:
45345
45346   * how often each line of code executes
45347
45348   * what lines of code are actually executed
45349
45350   * how much computing time each section of code uses
45351
45352 Once you know these things about how your code works when compiled, you
45353can look at each module to see which modules should be optimized.
45354`gcov' helps you determine where to work on optimization.
45355
45356 Software developers also use coverage testing in concert with
45357testsuites, to make sure software is actually good enough for a release.
45358Testsuites can verify that a program works as expected; a coverage
45359program tests to see how much of the program is exercised by the
45360testsuite.  Developers can then determine what kinds of test cases need
45361to be added to the testsuites to create both better testing and a better
45362final product.
45363
45364 You should compile your code without optimization if you plan to use
45365`gcov' because the optimization, by combining some lines of code into
45366one function, may not give you as much information as you need to look
45367for `hot spots' where the code is using a great deal of computer time.
45368Likewise, because `gcov' accumulates statistics by line (at the lowest
45369resolution), it works best with a programming style that places only
45370one statement on each line.  If you use complicated macros that expand
45371to loops or to other control structures, the statistics are less
45372helpful--they only report on the line where the macro call appears.  If
45373your complex macros behave like functions, you can replace them with
45374inline functions to solve this problem.
45375
45376 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how
45377many times each line of a source file `SOURCEFILE.c' has executed.  You
45378can use these logfiles along with `gprof' to aid in fine-tuning the
45379performance of your programs.  `gprof' gives timing information you can
45380use along with the information you get from `gcov'.
45381
45382 `gcov' works only on code compiled with GCC.  It is not compatible
45383with any other profiling or test coverage mechanism.
45384
45385
45386File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
45387
4538810.2 Invoking `gcov'
45389====================
45390
45391     gcov [OPTIONS] FILES
45392
45393 `gcov' accepts the following options:
45394
45395`-h'
45396`--help'
45397     Display help about using `gcov' (on the standard output), and exit
45398     without doing any further processing.
45399
45400`-v'
45401`--version'
45402     Display the `gcov' version number (on the standard output), and
45403     exit without doing any further processing.
45404
45405`-a'
45406`--all-blocks'
45407     Write individual execution counts for every basic block.  Normally
45408     gcov outputs execution counts only for the main blocks of a line.
45409     With this option you can determine if blocks within a single line
45410     are not being executed.
45411
45412`-b'
45413`--branch-probabilities'
45414     Write branch frequencies to the output file, and write branch
45415     summary info to the standard output.  This option allows you to
45416     see how often each branch in your program was taken.
45417     Unconditional branches will not be shown, unless the `-u' option
45418     is given.
45419
45420`-c'
45421`--branch-counts'
45422     Write branch frequencies as the number of branches taken, rather
45423     than the percentage of branches taken.
45424
45425`-n'
45426`--no-output'
45427     Do not create the `gcov' output file.
45428
45429`-l'
45430`--long-file-names'
45431     Create long file names for included source files.  For example, if
45432     the header file `x.h' contains code, and was included in the file
45433     `a.c', then running `gcov' on the file `a.c' will produce an
45434     output file called `a.c##x.h.gcov' instead of `x.h.gcov'.  This
45435     can be useful if `x.h' is included in multiple source files and
45436     you want to see the individual contributions.  If you use the `-p'
45437     option, both the including and included file names will be
45438     complete path names.
45439
45440`-p'
45441`--preserve-paths'
45442     Preserve complete path information in the names of generated
45443     `.gcov' files.  Without this option, just the filename component is
45444     used.  With this option, all directories are used, with `/'
45445     characters translated to `#' characters, `.' directory components
45446     removed and unremoveable `..' components renamed to `^'.  This is
45447     useful if sourcefiles are in several different directories.
45448
45449`-r'
45450`--relative-only'
45451     Only output information about source files with a relative pathname
45452     (after source prefix elision).  Absolute paths are usually system
45453     header files and coverage of any inline functions therein is
45454     normally uninteresting.
45455
45456`-f'
45457`--function-summaries'
45458     Output summaries for each function in addition to the file level
45459     summary.
45460
45461`-o DIRECTORY|FILE'
45462`--object-directory DIRECTORY'
45463`--object-file FILE'
45464     Specify either the directory containing the gcov data files, or the
45465     object path name.  The `.gcno', and `.gcda' data files are
45466     searched for using this option.  If a directory is specified, the
45467     data files are in that directory and named after the input file
45468     name, without its extension.  If a file is specified here, the
45469     data files are named after that file, without its extension.
45470
45471`-s DIRECTORY'
45472`--source-prefix DIRECTORY'
45473     A prefix for source file names to remove when generating the output
45474     coverage files.  This option is useful when building in a separate
45475     directory, and the pathname to the source directory is not wanted
45476     when determining the output file names.  Note that this prefix
45477     detection is applied before determining whether the source file is
45478     absolute.
45479
45480`-u'
45481`--unconditional-branches'
45482     When branch probabilities are given, include those of
45483     unconditional branches.  Unconditional branches are normally not
45484     interesting.
45485
45486`-d'
45487`--display-progress'
45488     Display the progress on the standard output.
45489
45490
45491 `gcov' should be run with the current directory the same as that when
45492you invoked the compiler.  Otherwise it will not be able to locate the
45493source files.  `gcov' produces files called `MANGLEDNAME.gcov' in the
45494current directory.  These contain the coverage information of the
45495source file they correspond to.  One `.gcov' file is produced for each
45496source (or header) file containing code, which was compiled to produce
45497the data files.  The MANGLEDNAME part of the output file name is
45498usually simply the source file name, but can be something more
45499complicated if the `-l' or `-p' options are given.  Refer to those
45500options for details.
45501
45502 If you invoke `gcov' with multiple input files, the contributions from
45503each input file are summed.  Typically you would invoke it with the
45504same list of files as the final link of your executable.
45505
45506 The `.gcov' files contain the `:' separated fields along with program
45507source code.  The format is
45508
45509     EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
45510
45511 Additional block information may succeed each line, when requested by
45512command line option.  The EXECUTION_COUNT is `-' for lines containing
45513no code.  Unexecuted lines are marked `#####' or `====', depending on
45514whether they are reachable by non-exceptional paths or only exceptional
45515paths such as C++ exception handlers, respectively.
45516
45517 Some lines of information at the start have LINE_NUMBER of zero.
45518These preamble lines are of the form
45519
45520     -:0:TAG:VALUE
45521
45522 The ordering and number of these preamble lines will be augmented as
45523`gcov' development progresses -- do not rely on them remaining
45524unchanged.  Use TAG to locate a particular preamble line.
45525
45526 The additional block information is of the form
45527
45528     TAG INFORMATION
45529
45530 The INFORMATION is human readable, but designed to be simple enough
45531for machine parsing too.
45532
45533 When printing percentages, 0% and 100% are only printed when the values
45534are _exactly_ 0% and 100% respectively.  Other values which would
45535conventionally be rounded to 0% or 100% are instead printed as the
45536nearest non-boundary value.
45537
45538 When using `gcov', you must first compile your program with two
45539special GCC options: `-fprofile-arcs -ftest-coverage'.  This tells the
45540compiler to generate additional information needed by gcov (basically a
45541flow graph of the program) and also includes additional code in the
45542object files for generating the extra profiling information needed by
45543gcov.  These additional files are placed in the directory where the
45544object file is located.
45545
45546 Running the program will cause profile output to be generated.  For
45547each source file compiled with `-fprofile-arcs', an accompanying
45548`.gcda' file will be placed in the object file directory.
45549
45550 Running `gcov' with your program's source file names as arguments will
45551now produce a listing of the code along with frequency of execution for
45552each line.  For example, if your program is called `tmp.c', this is
45553what you see when you use the basic `gcov' facility:
45554
45555     $ gcc -fprofile-arcs -ftest-coverage tmp.c
45556     $ a.out
45557     $ gcov tmp.c
45558     90.00% of 10 source lines executed in file tmp.c
45559     Creating tmp.c.gcov.
45560
45561 The file `tmp.c.gcov' contains output from `gcov'.  Here is a sample:
45562
45563             -:    0:Source:tmp.c
45564             -:    0:Graph:tmp.gcno
45565             -:    0:Data:tmp.gcda
45566             -:    0:Runs:1
45567             -:    0:Programs:1
45568             -:    1:#include <stdio.h>
45569             -:    2:
45570             -:    3:int main (void)
45571             1:    4:{
45572             1:    5:  int i, total;
45573             -:    6:
45574             1:    7:  total = 0;
45575             -:    8:
45576            11:    9:  for (i = 0; i < 10; i++)
45577            10:   10:    total += i;
45578             -:   11:
45579             1:   12:  if (total != 45)
45580         #####:   13:    printf ("Failure\n");
45581             -:   14:  else
45582             1:   15:    printf ("Success\n");
45583             1:   16:  return 0;
45584             -:   17:}
45585
45586 When you use the `-a' option, you will get individual block counts,
45587and the output looks like this:
45588
45589             -:    0:Source:tmp.c
45590             -:    0:Graph:tmp.gcno
45591             -:    0:Data:tmp.gcda
45592             -:    0:Runs:1
45593             -:    0:Programs:1
45594             -:    1:#include <stdio.h>
45595             -:    2:
45596             -:    3:int main (void)
45597             1:    4:{
45598             1:    4-block  0
45599             1:    5:  int i, total;
45600             -:    6:
45601             1:    7:  total = 0;
45602             -:    8:
45603            11:    9:  for (i = 0; i < 10; i++)
45604            11:    9-block  0
45605            10:   10:    total += i;
45606            10:   10-block  0
45607             -:   11:
45608             1:   12:  if (total != 45)
45609             1:   12-block  0
45610         #####:   13:    printf ("Failure\n");
45611         $$$$$:   13-block  0
45612             -:   14:  else
45613             1:   15:    printf ("Success\n");
45614             1:   15-block  0
45615             1:   16:  return 0;
45616             1:   16-block  0
45617             -:   17:}
45618
45619 In this mode, each basic block is only shown on one line - the last
45620line of the block.  A multi-line block will only contribute to the
45621execution count of that last line, and other lines will not be shown to
45622contain code, unless previous blocks end on those lines.  The total
45623execution count of a line is shown and subsequent lines show the
45624execution counts for individual blocks that end on that line.  After
45625each block, the branch and call counts of the block will be shown, if
45626the `-b' option is given.
45627
45628 Because of the way GCC instruments calls, a call count can be shown
45629after a line with no individual blocks.  As you can see, line 13
45630contains a basic block that was not executed.
45631
45632 When you use the `-b' option, your output looks like this:
45633
45634     $ gcov -b tmp.c
45635     90.00% of 10 source lines executed in file tmp.c
45636     80.00% of 5 branches executed in file tmp.c
45637     80.00% of 5 branches taken at least once in file tmp.c
45638     50.00% of 2 calls executed in file tmp.c
45639     Creating tmp.c.gcov.
45640
45641 Here is a sample of a resulting `tmp.c.gcov' file:
45642
45643             -:    0:Source:tmp.c
45644             -:    0:Graph:tmp.gcno
45645             -:    0:Data:tmp.gcda
45646             -:    0:Runs:1
45647             -:    0:Programs:1
45648             -:    1:#include <stdio.h>
45649             -:    2:
45650             -:    3:int main (void)
45651     function main called 1 returned 1 blocks executed 75%
45652             1:    4:{
45653             1:    5:  int i, total;
45654             -:    6:
45655             1:    7:  total = 0;
45656             -:    8:
45657            11:    9:  for (i = 0; i < 10; i++)
45658     branch  0 taken 91% (fallthrough)
45659     branch  1 taken 9%
45660            10:   10:    total += i;
45661             -:   11:
45662             1:   12:  if (total != 45)
45663     branch  0 taken 0% (fallthrough)
45664     branch  1 taken 100%
45665         #####:   13:    printf ("Failure\n");
45666     call    0 never executed
45667             -:   14:  else
45668             1:   15:    printf ("Success\n");
45669     call    0 called 1 returned 100%
45670             1:   16:  return 0;
45671             -:   17:}
45672
45673 For each function, a line is printed showing how many times the
45674function is called, how many times it returns and what percentage of the
45675function's blocks were executed.
45676
45677 For each basic block, a line is printed after the last line of the
45678basic block describing the branch or call that ends the basic block.
45679There can be multiple branches and calls listed for a single source
45680line if there are multiple basic blocks that end on that line.  In this
45681case, the branches and calls are each given a number.  There is no
45682simple way to map these branches and calls back to source constructs.
45683In general, though, the lowest numbered branch or call will correspond
45684to the leftmost construct on the source line.
45685
45686 For a branch, if it was executed at least once, then a percentage
45687indicating the number of times the branch was taken divided by the
45688number of times the branch was executed will be printed.  Otherwise, the
45689message "never executed" is printed.
45690
45691 For a call, if it was executed at least once, then a percentage
45692indicating the number of times the call returned divided by the number
45693of times the call was executed will be printed.  This will usually be
45694100%, but may be less for functions that call `exit' or `longjmp', and
45695thus may not return every time they are called.
45696
45697 The execution counts are cumulative.  If the example program were
45698executed again without removing the `.gcda' file, the count for the
45699number of times each line in the source was executed would be added to
45700the results of the previous run(s).  This is potentially useful in
45701several ways.  For example, it could be used to accumulate data over a
45702number of program runs as part of a test verification suite, or to
45703provide more accurate long-term information over a large number of
45704program runs.
45705
45706 The data in the `.gcda' files is saved immediately before the program
45707exits.  For each source file compiled with `-fprofile-arcs', the
45708profiling code first attempts to read in an existing `.gcda' file; if
45709the file doesn't match the executable (differing number of basic block
45710counts) it will ignore the contents of the file.  It then adds in the
45711new execution counts and finally writes the data to the file.
45712
45713
45714File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
45715
4571610.3 Using `gcov' with GCC Optimization
45717=======================================
45718
45719If you plan to use `gcov' to help optimize your code, you must first
45720compile your program with two special GCC options: `-fprofile-arcs
45721-ftest-coverage'.  Aside from that, you can use any other GCC options;
45722but if you want to prove that every single line in your program was
45723executed, you should not compile with optimization at the same time.
45724On some machines the optimizer can eliminate some simple code lines by
45725combining them with other lines.  For example, code like this:
45726
45727     if (a != b)
45728       c = 1;
45729     else
45730       c = 0;
45731
45732can be compiled into one instruction on some machines.  In this case,
45733there is no way for `gcov' to calculate separate execution counts for
45734each line because there isn't separate code for each line.  Hence the
45735`gcov' output looks like this if you compiled the program with
45736optimization:
45737
45738           100:   12:if (a != b)
45739           100:   13:  c = 1;
45740           100:   14:else
45741           100:   15:  c = 0;
45742
45743 The output shows that this block of code, combined by optimization,
45744executed 100 times.  In one sense this result is correct, because there
45745was only one instruction representing all four of these lines.  However,
45746the output does not indicate how many times the result was 0 and how
45747many times the result was 1.
45748
45749 Inlineable functions can create unexpected line counts.  Line counts
45750are shown for the source code of the inlineable function, but what is
45751shown depends on where the function is inlined, or if it is not inlined
45752at all.
45753
45754 If the function is not inlined, the compiler must emit an out of line
45755copy of the function, in any object file that needs it.  If `fileA.o'
45756and `fileB.o' both contain out of line bodies of a particular
45757inlineable function, they will also both contain coverage counts for
45758that function.  When `fileA.o' and `fileB.o' are linked together, the
45759linker will, on many systems, select one of those out of line bodies
45760for all calls to that function, and remove or ignore the other.
45761Unfortunately, it will not remove the coverage counters for the unused
45762function body.  Hence when instrumented, all but one use of that
45763function will show zero counts.
45764
45765 If the function is inlined in several places, the block structure in
45766each location might not be the same.  For instance, a condition might
45767now be calculable at compile time in some instances.  Because the
45768coverage of all the uses of the inline function will be shown for the
45769same source lines, the line counts themselves might seem inconsistent.
45770
45771 Long-running applications can use the `_gcov_reset' and `_gcov_dump'
45772facilities to restrict profile collection to the program region of
45773interest. Calling `_gcov_reset(void)' will clear all profile counters
45774to zero, and calling `_gcov_dump(void)' will cause the profile
45775information collected at that point to be dumped to `.gcda' output
45776files.
45777
45778
45779File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov
45780
4578110.4 Brief description of `gcov' data files
45782===========================================
45783
45784`gcov' uses two files for profiling.  The names of these files are
45785derived from the original _object_ file by substituting the file suffix
45786with either `.gcno', or `.gcda'.  The files contain coverage and
45787profile data stored in a platform-independent format.  The `.gcno'
45788files are placed in the same directory as the object file.  By default,
45789the `.gcda' files are also stored in the same directory as the object
45790file, but the GCC `-fprofile-dir' option may be used to store the
45791`.gcda' files in a separate directory.
45792
45793 The `.gcno' notes file is generated when the source file is compiled
45794with the GCC `-ftest-coverage' option.  It contains information to
45795reconstruct the basic block graphs and assign source line numbers to
45796blocks.
45797
45798 The `.gcda' count data file is generated when a program containing
45799object files built with the GCC `-fprofile-arcs' option is executed.  A
45800separate `.gcda' file is created for each object file compiled with
45801this option.  It contains arc transition counts, value profile counts,
45802and some summary information.
45803
45804 The full details of the file format is specified in `gcov-io.h', and
45805functions provided in that header file should be used to access the
45806coverage files.
45807
45808
45809File: gcc.info,  Node: Cross-profiling,  Prev: Gcov Data Files,  Up: Gcov
45810
4581110.5 Data file relocation to support cross-profiling
45812====================================================
45813
45814Running the program will cause profile output to be generated.  For each
45815source file compiled with `-fprofile-arcs', an accompanying `.gcda'
45816file will be placed in the object file directory. That implicitly
45817requires running the program on the same system as it was built or
45818having the same absolute directory structure on the target system. The
45819program will try to create the needed directory structure, if it is not
45820already present.
45821
45822 To support cross-profiling, a program compiled with `-fprofile-arcs'
45823can relocate the data files based on two environment variables:
45824
45825   * GCOV_PREFIX contains the prefix to add to the absolute paths in
45826     the object file. Prefix can be absolute, or relative.  The default
45827     is no prefix.
45828
45829   * GCOV_PREFIX_STRIP indicates the how many initial directory names
45830     to strip off the hardwired absolute paths. Default value is 0.
45831
45832     _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is
45833     undefined,  then a relative path is made out of the hardwired
45834     absolute paths.
45835
45836 For example, if the object file `/user/build/foo.o' was built with
45837`-fprofile-arcs', the final executable will try to create the data file
45838`/user/build/foo.gcda' when running on the target system.  This will
45839fail if the corresponding directory does not exist and it is unable to
45840create it.  This can be overcome by, for example, setting the
45841environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'.
45842Such a setting will name the data file `/target/run/build/foo.gcda'.
45843
45844 You must move the data files to the expected directory tree in order to
45845use them for profile directed optimizations (`--use-profile'), or to
45846use the `gcov' tool.
45847
45848
45849File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: Gcov,  Up: Top
45850
4585111 Known Causes of Trouble with GCC
45852***********************************
45853
45854This section describes known problems that affect users of GCC.  Most
45855of these are not GCC bugs per se--if they were, we would fix them.  But
45856the result for a user may be like the result of a bug.
45857
45858 Some of these problems are due to bugs in other software, some are
45859missing features that are too much work to add, and some are places
45860where people's opinions differ as to what is best.
45861
45862* Menu:
45863
45864* Actual Bugs::         Bugs we will fix later.
45865* Interoperation::      Problems using GCC with other compilers,
45866                        and with certain linkers, assemblers and debuggers.
45867* Incompatibilities::   GCC is incompatible with traditional C.
45868* Fixed Headers::       GCC uses corrected versions of system header files.
45869                        This is necessary, but doesn't always work smoothly.
45870* Standard Libraries::  GCC uses the system C library, which might not be
45871                        compliant with the ISO C standard.
45872* Disappointments::     Regrettable things we can't change, but not quite bugs.
45873* C++ Misunderstandings:: Common misunderstandings with GNU C++.
45874* Non-bugs::            Things we think are right, but some others disagree.
45875* Warnings and Errors:: Which problems in your code get warnings,
45876                        and which get errors.
45877
45878
45879File: gcc.info,  Node: Actual Bugs,  Next: Interoperation,  Up: Trouble
45880
4588111.1 Actual Bugs We Haven't Fixed Yet
45882=====================================
45883
45884   * The `fixincludes' script interacts badly with automounters; if the
45885     directory of system header files is automounted, it tends to be
45886     unmounted while `fixincludes' is running.  This would seem to be a
45887     bug in the automounter.  We don't know any good way to work around
45888     it.
45889
45890
45891File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Actual Bugs,  Up: Trouble
45892
4589311.2 Interoperation
45894===================
45895
45896This section lists various difficulties encountered in using GCC
45897together with other compilers or with the assemblers, linkers,
45898libraries and debuggers on certain systems.
45899
45900   * On many platforms, GCC supports a different ABI for C++ than do
45901     other compilers, so the object files compiled by GCC cannot be
45902     used with object files generated by another C++ compiler.
45903
45904     An area where the difference is most apparent is name mangling.
45905     The use of different name mangling is intentional, to protect you
45906     from more subtle problems.  Compilers differ as to many internal
45907     details of C++ implementation, including: how class instances are
45908     laid out, how multiple inheritance is implemented, and how virtual
45909     function calls are handled.  If the name encoding were made the
45910     same, your programs would link against libraries provided from
45911     other compilers--but the programs would then crash when run.
45912     Incompatible libraries are then detected at link time, rather than
45913     at run time.
45914
45915   * On some BSD systems, including some versions of Ultrix, use of
45916     profiling causes static variable destructors (currently used only
45917     in C++) not to be run.
45918
45919   * On a SPARC, GCC aligns all values of type `double' on an 8-byte
45920     boundary, and it expects every `double' to be so aligned.  The Sun
45921     compiler usually gives `double' values 8-byte alignment, with one
45922     exception: function arguments of type `double' may not be aligned.
45923
45924     As a result, if a function compiled with Sun CC takes the address
45925     of an argument of type `double' and passes this pointer of type
45926     `double *' to a function compiled with GCC, dereferencing the
45927     pointer may cause a fatal signal.
45928
45929     One way to solve this problem is to compile your entire program
45930     with GCC.  Another solution is to modify the function that is
45931     compiled with Sun CC to copy the argument into a local variable;
45932     local variables are always properly aligned.  A third solution is
45933     to modify the function that uses the pointer to dereference it via
45934     the following function `access_double' instead of directly with
45935     `*':
45936
45937          inline double
45938          access_double (double *unaligned_ptr)
45939          {
45940            union d2i { double d; int i[2]; };
45941
45942            union d2i *p = (union d2i *) unaligned_ptr;
45943            union d2i u;
45944
45945            u.i[0] = p->i[0];
45946            u.i[1] = p->i[1];
45947
45948            return u.d;
45949          }
45950
45951     Storing into the pointer can be done likewise with the same union.
45952
45953   * On Solaris, the `malloc' function in the `libmalloc.a' library may
45954     allocate memory that is only 4 byte aligned.  Since GCC on the
45955     SPARC assumes that doubles are 8 byte aligned, this may result in a
45956     fatal signal if doubles are stored in memory allocated by the
45957     `libmalloc.a' library.
45958
45959     The solution is to not use the `libmalloc.a' library.  Use instead
45960     `malloc' and related functions from `libc.a'; they do not have
45961     this problem.
45962
45963   * On the HP PA machine, ADB sometimes fails to work on functions
45964     compiled with GCC.  Specifically, it fails to work on functions
45965     that use `alloca' or variable-size arrays.  This is because GCC
45966     doesn't generate HP-UX unwind descriptors for such functions.  It
45967     may even be impossible to generate them.
45968
45969   * Debugging (`-g') is not supported on the HP PA machine, unless you
45970     use the preliminary GNU tools.
45971
45972   * Taking the address of a label may generate errors from the HP-UX
45973     PA assembler.  GAS for the PA does not have this problem.
45974
45975   * Using floating point parameters for indirect calls to static
45976     functions will not work when using the HP assembler.  There simply
45977     is no way for GCC to specify what registers hold arguments for
45978     static functions when using the HP assembler.  GAS for the PA does
45979     not have this problem.
45980
45981   * In extremely rare cases involving some very large functions you may
45982     receive errors from the HP linker complaining about an out of
45983     bounds unconditional branch offset.  This used to occur more often
45984     in previous versions of GCC, but is now exceptionally rare.  If
45985     you should run into it, you can work around by making your
45986     function smaller.
45987
45988   * GCC compiled code sometimes emits warnings from the HP-UX
45989     assembler of the form:
45990
45991          (warning) Use of GR3 when
45992            frame >= 8192 may cause conflict.
45993
45994     These warnings are harmless and can be safely ignored.
45995
45996   * In extremely rare cases involving some very large functions you may
45997     receive errors from the AIX Assembler complaining about a
45998     displacement that is too large.  If you should run into it, you
45999     can work around by making your function smaller.
46000
46001   * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker
46002     semantics which merges global symbols between libraries and
46003     applications, especially necessary for C++ streams functionality.
46004     This is not the default behavior of AIX shared libraries and
46005     dynamic linking.  `libstdc++.a' is built on AIX with
46006     "runtime-linking" enabled so that symbol merging can occur.  To
46007     utilize this feature, the application linked with `libstdc++.a'
46008     must include the `-Wl,-brtl' flag on the link line.  G++ cannot
46009     impose this because this option may interfere with the semantics
46010     of the user program and users may not always use `g++' to link his
46011     or her application.  Applications are not required to use the
46012     `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a'
46013     library which is not dependent on the symbol merging semantics
46014     will continue to function correctly.
46015
46016   * An application can interpose its own definition of functions for
46017     functions invoked by `libstdc++.a' with "runtime-linking" enabled
46018     on AIX.  To accomplish this the application must be linked with
46019     "runtime-linking" option and the functions explicitly must be
46020     exported by the application (`-Wl,-brtl,-bE:exportfile').
46021
46022   * AIX on the RS/6000 provides support (NLS) for environments outside
46023     of the United States.  Compilers and assemblers use NLS to support
46024     locale-specific representations of various objects including
46025     floating-point numbers (`.' vs `,' for separating decimal
46026     fractions).  There have been problems reported where the library
46027     linked with GCC does not produce the same floating-point formats
46028     that the assembler accepts.  If you have this problem, set the
46029     `LANG' environment variable to `C' or `En_US'.
46030
46031   * Even if you specify `-fdollars-in-identifiers', you cannot
46032     successfully use `$' in identifiers on the RS/6000 due to a
46033     restriction in the IBM assembler.  GAS supports these identifiers.
46034
46035
46036
46037File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: Interoperation,  Up: Trouble
46038
4603911.3 Incompatibilities of GCC
46040=============================
46041
46042There are several noteworthy incompatibilities between GNU C and K&R
46043(non-ISO) versions of C.
46044
46045   * GCC normally makes string constants read-only.  If several
46046     identical-looking string constants are used, GCC stores only one
46047     copy of the string.
46048
46049     One consequence is that you cannot call `mktemp' with a string
46050     constant argument.  The function `mktemp' always alters the string
46051     its argument points to.
46052
46053     Another consequence is that `sscanf' does not work on some very
46054     old systems when passed a string constant as its format control
46055     string or input.  This is because `sscanf' incorrectly tries to
46056     write into the string constant.  Likewise `fscanf' and `scanf'.
46057
46058     The solution to these problems is to change the program to use
46059     `char'-array variables with initialization strings for these
46060     purposes instead of string constants.
46061
46062   * `-2147483648' is positive.
46063
46064     This is because 2147483648 cannot fit in the type `int', so
46065     (following the ISO C rules) its data type is `unsigned long int'.
46066     Negating this value yields 2147483648 again.
46067
46068   * GCC does not substitute macro arguments when they appear inside of
46069     string constants.  For example, the following macro in GCC
46070
46071          #define foo(a) "a"
46072
46073     will produce output `"a"' regardless of what the argument A is.
46074
46075   * When you use `setjmp' and `longjmp', the only automatic variables
46076     guaranteed to remain valid are those declared `volatile'.  This is
46077     a consequence of automatic register allocation.  Consider this
46078     function:
46079
46080          jmp_buf j;
46081
46082          foo ()
46083          {
46084            int a, b;
46085
46086            a = fun1 ();
46087            if (setjmp (j))
46088              return a;
46089
46090            a = fun2 ();
46091            /* `longjmp (j)' may occur in `fun3'. */
46092            return a + fun3 ();
46093          }
46094
46095     Here `a' may or may not be restored to its first value when the
46096     `longjmp' occurs.  If `a' is allocated in a register, then its
46097     first value is restored; otherwise, it keeps the last value stored
46098     in it.
46099
46100     If you use the `-W' option with the `-O' option, you will get a
46101     warning when GCC thinks such a problem might be possible.
46102
46103   * Programs that use preprocessing directives in the middle of macro
46104     arguments do not work with GCC.  For example, a program like this
46105     will not work:
46106
46107          foobar (
46108          #define luser
46109                  hack)
46110
46111     ISO C does not permit such a construct.
46112
46113   * K&R compilers allow comments to cross over an inclusion boundary
46114     (i.e. started in an include file and ended in the including file).
46115
46116   * Declarations of external variables and functions within a block
46117     apply only to the block containing the declaration.  In other
46118     words, they have the same scope as any other declaration in the
46119     same place.
46120
46121     In some other C compilers, an `extern' declaration affects all the
46122     rest of the file even if it happens within a block.
46123
46124   * In traditional C, you can combine `long', etc., with a typedef
46125     name, as shown here:
46126
46127          typedef int foo;
46128          typedef long foo bar;
46129
46130     In ISO C, this is not allowed: `long' and other type modifiers
46131     require an explicit `int'.
46132
46133   * PCC allows typedef names to be used as function parameters.
46134
46135   * Traditional C allows the following erroneous pair of declarations
46136     to appear together in a given scope:
46137
46138          typedef int foo;
46139          typedef foo foo;
46140
46141   * GCC treats all characters of identifiers as significant.
46142     According to K&R-1 (2.2), "No more than the first eight characters
46143     are significant, although more may be used.".  Also according to
46144     K&R-1 (2.2), "An identifier is a sequence of letters and digits;
46145     the first character must be a letter.  The underscore _ counts as
46146     a letter.", but GCC also allows dollar signs in identifiers.
46147
46148   * PCC allows whitespace in the middle of compound assignment
46149     operators such as `+='.  GCC, following the ISO standard, does not
46150     allow this.
46151
46152   * GCC complains about unterminated character constants inside of
46153     preprocessing conditionals that fail.  Some programs have English
46154     comments enclosed in conditionals that are guaranteed to fail; if
46155     these comments contain apostrophes, GCC will probably report an
46156     error.  For example, this code would produce an error:
46157
46158          #if 0
46159          You can't expect this to work.
46160          #endif
46161
46162     The best solution to such a problem is to put the text into an
46163     actual C comment delimited by `/*...*/'.
46164
46165   * Many user programs contain the declaration `long time ();'.  In the
46166     past, the system header files on many systems did not actually
46167     declare `time', so it did not matter what type your program
46168     declared it to return.  But in systems with ISO C headers, `time'
46169     is declared to return `time_t', and if that is not the same as
46170     `long', then `long time ();' is erroneous.
46171
46172     The solution is to change your program to use appropriate system
46173     headers (`<time.h>' on systems with ISO C headers) and not to
46174     declare `time' if the system header files declare it, or failing
46175     that to use `time_t' as the return type of `time'.
46176
46177   * When compiling functions that return `float', PCC converts it to a
46178     double.  GCC actually returns a `float'.  If you are concerned
46179     with PCC compatibility, you should declare your functions to return
46180     `double'; you might as well say what you mean.
46181
46182   * When compiling functions that return structures or unions, GCC
46183     output code normally uses a method different from that used on most
46184     versions of Unix.  As a result, code compiled with GCC cannot call
46185     a structure-returning function compiled with PCC, and vice versa.
46186
46187     The method used by GCC is as follows: a structure or union which is
46188     1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
46189     union with any other size is stored into an address supplied by
46190     the caller (usually in a special, fixed register, but on some
46191     machines it is passed on the stack).  The target hook
46192     `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
46193
46194     By contrast, PCC on most target machines returns structures and
46195     unions of any size by copying the data into an area of static
46196     storage, and then returning the address of that storage as if it
46197     were a pointer value.  The caller must copy the data from that
46198     memory area to the place where the value is wanted.  GCC does not
46199     use this method because it is slower and nonreentrant.
46200
46201     On some newer machines, PCC uses a reentrant convention for all
46202     structure and union returning.  GCC on most of these machines uses
46203     a compatible convention when returning structures and unions in
46204     memory, but still returns small structures and unions in registers.
46205
46206     You can tell GCC to use a compatible convention for all structure
46207     and union returning with the option `-fpcc-struct-return'.
46208
46209   * GCC complains about program fragments such as `0x74ae-0x4000'
46210     which appear to be two hexadecimal constants separated by the minus
46211     operator.  Actually, this string is a single "preprocessing token".
46212     Each such token must correspond to one token in C.  Since this
46213     does not, GCC prints an error message.  Although it may appear
46214     obvious that what is meant is an operator and two values, the ISO
46215     C standard specifically requires that this be treated as erroneous.
46216
46217     A "preprocessing token" is a "preprocessing number" if it begins
46218     with a digit and is followed by letters, underscores, digits,
46219     periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-'
46220     character sequences.  (In strict C90 mode, the sequences `p+',
46221     `p-', `P+' and `P-' cannot appear in preprocessing numbers.)
46222
46223     To make the above program fragment valid, place whitespace in
46224     front of the minus sign.  This whitespace will end the
46225     preprocessing number.
46226
46227
46228File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble
46229
4623011.4 Fixed Header Files
46231=======================
46232
46233GCC needs to install corrected versions of some system header files.
46234This is because most target systems have some header files that won't
46235work with GCC unless they are changed.  Some have bugs, some are
46236incompatible with ISO C, and some depend on special features of other
46237compilers.
46238
46239 Installing GCC automatically creates and installs the fixed header
46240files, by running a program called `fixincludes'.  Normally, you don't
46241need to pay attention to this.  But there are cases where it doesn't do
46242the right thing automatically.
46243
46244   * If you update the system's header files, such as by installing a
46245     new system version, the fixed header files of GCC are not
46246     automatically updated.  They can be updated using the `mkheaders'
46247     script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
46248
46249   * On some systems, header file directories contain machine-specific
46250     symbolic links in certain places.  This makes it possible to share
46251     most of the header files among hosts running the same version of
46252     the system on different machine models.
46253
46254     The programs that fix the header files do not understand this
46255     special way of using symbolic links; therefore, the directory of
46256     fixed header files is good only for the machine model used to
46257     build it.
46258
46259     It is possible to make separate sets of fixed header files for the
46260     different machine models, and arrange a structure of symbolic
46261     links so as to use the proper set, but you'll have to do this by
46262     hand.
46263
46264
46265File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble
46266
4626711.5 Standard Libraries
46268=======================
46269
46270GCC by itself attempts to be a conforming freestanding implementation.
46271*Note Language Standards Supported by GCC: Standards, for details of
46272what this means.  Beyond the library facilities required of such an
46273implementation, the rest of the C library is supplied by the vendor of
46274the operating system.  If that C library doesn't conform to the C
46275standards, then your programs might get warnings (especially when using
46276`-Wall') that you don't expect.
46277
46278 For example, the `sprintf' function on SunOS 4.1.3 returns `char *'
46279while the C standard says that `sprintf' returns an `int'.  The
46280`fixincludes' program could make the prototype for this function match
46281the Standard, but that would be wrong, since the function will still
46282return `char *'.
46283
46284 If you need a Standard compliant library, then you need to find one, as
46285GCC does not provide one.  The GNU C library (called `glibc') provides
46286ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
46287HURD-based GNU systems; no recent version of it supports other systems,
46288though some very old versions did.  Version 2.2 of the GNU C library
46289includes nearly complete C99 support.  You could also ask your
46290operating system vendor if newer libraries are available.
46291
46292
46293File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble
46294
4629511.6 Disappointments and Misunderstandings
46296==========================================
46297
46298These problems are perhaps regrettable, but we don't know any practical
46299way around them.
46300
46301   * Certain local variables aren't recognized by debuggers when you
46302     compile with optimization.
46303
46304     This occurs because sometimes GCC optimizes the variable out of
46305     existence.  There is no way to tell the debugger how to compute the
46306     value such a variable "would have had", and it is not clear that
46307     would be desirable anyway.  So GCC simply does not mention the
46308     eliminated variable when it writes debugging information.
46309
46310     You have to expect a certain amount of disagreement between the
46311     executable and your source code, when you use optimization.
46312
46313   * Users often think it is a bug when GCC reports an error for code
46314     like this:
46315
46316          int foo (struct mumble *);
46317
46318          struct mumble { ... };
46319
46320          int foo (struct mumble *x)
46321          { ... }
46322
46323     This code really is erroneous, because the scope of `struct
46324     mumble' in the prototype is limited to the argument list
46325     containing it.  It does not refer to the `struct mumble' defined
46326     with file scope immediately below--they are two unrelated types
46327     with similar names in different scopes.
46328
46329     But in the definition of `foo', the file-scope type is used
46330     because that is available to be inherited.  Thus, the definition
46331     and the prototype do not match, and you get an error.
46332
46333     This behavior may seem silly, but it's what the ISO standard
46334     specifies.  It is easy enough for you to make your code work by
46335     moving the definition of `struct mumble' above the prototype.
46336     It's not worth being incompatible with ISO C just to avoid an
46337     error for the example shown above.
46338
46339   * Accesses to bit-fields even in volatile objects works by accessing
46340     larger objects, such as a byte or a word.  You cannot rely on what
46341     size of object is accessed in order to read or write the
46342     bit-field; it may even vary for a given bit-field according to the
46343     precise usage.
46344
46345     If you care about controlling the amount of memory that is
46346     accessed, use volatile but do not use bit-fields.
46347
46348   * GCC comes with shell scripts to fix certain known problems in
46349     system header files.  They install corrected copies of various
46350     header files in a special directory where only GCC will normally
46351     look for them.  The scripts adapt to various systems by searching
46352     all the system header files for the problem cases that we know
46353     about.
46354
46355     If new system header files are installed, nothing automatically
46356     arranges to update the corrected header files.  They can be
46357     updated using the `mkheaders' script installed in
46358     `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
46359
46360   * On 68000 and x86 systems, for instance, you can get paradoxical
46361     results if you test the precise values of floating point numbers.
46362     For example, you can find that a floating point value which is not
46363     a NaN is not equal to itself.  This results from the fact that the
46364     floating point registers hold a few more bits of precision than
46365     fit in a `double' in memory.  Compiled code moves values between
46366     memory and floating point registers at its convenience, and moving
46367     them into memory truncates them.
46368
46369     You can partially avoid this problem by using the `-ffloat-store'
46370     option (*note Optimize Options::).
46371
46372   * On AIX and other platforms without weak symbol support, templates
46373     need to be instantiated explicitly and symbols for static members
46374     of templates will not be generated.
46375
46376   * On AIX, GCC scans object files and library archives for static
46377     constructors and destructors when linking an application before the
46378     linker prunes unreferenced symbols.  This is necessary to prevent
46379     the AIX linker from mistakenly assuming that static constructor or
46380     destructor are unused and removing them before the scanning can
46381     occur.  All static constructors and destructors found will be
46382     referenced even though the modules in which they occur may not be
46383     used by the program.  This may lead to both increased executable
46384     size and unexpected symbol references.
46385
46386
46387File: gcc.info,  Node: C++ Misunderstandings,  Next: Non-bugs,  Prev: Disappointments,  Up: Trouble
46388
4638911.7 Common Misunderstandings with GNU C++
46390==========================================
46391
46392C++ is a complex language and an evolving one, and its standard
46393definition (the ISO C++ standard) was only recently completed.  As a
46394result, your C++ compiler may occasionally surprise you, even when its
46395behavior is correct.  This section discusses some areas that frequently
46396give rise to questions of this sort.
46397
46398* Menu:
46399
46400* Static Definitions::  Static member declarations are not definitions
46401* Name lookup::         Name lookup, templates, and accessing members of base classes
46402* Temporaries::         Temporaries may vanish before you expect
46403* Copy Assignment::     Copy Assignment operators copy virtual bases twice
46404
46405
46406File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings
46407
4640811.7.1 Declare _and_ Define Static Members
46409------------------------------------------
46410
46411When a class has static data members, it is not enough to _declare_ the
46412static member; you must also _define_ it.  For example:
46413
46414     class Foo
46415     {
46416       ...
46417       void method();
46418       static int bar;
46419     };
46420
46421 This declaration only establishes that the class `Foo' has an `int'
46422named `Foo::bar', and a member function named `Foo::method'.  But you
46423still need to define _both_ `method' and `bar' elsewhere.  According to
46424the ISO standard, you must supply an initializer in one (and only one)
46425source file, such as:
46426
46427     int Foo::bar = 0;
46428
46429 Other C++ compilers may not correctly implement the standard behavior.
46430As a result, when you switch to `g++' from one of these compilers, you
46431may discover that a program that appeared to work correctly in fact
46432does not conform to the standard: `g++' reports as undefined symbols
46433any static data members that lack definitions.
46434
46435
46436File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
46437
4643811.7.2 Name lookup, templates, and accessing members of base classes
46439--------------------------------------------------------------------
46440
46441The C++ standard prescribes that all names that are not dependent on
46442template parameters are bound to their present definitions when parsing
46443a template function or class.(1)  Only names that are dependent are
46444looked up at the point of instantiation.  For example, consider
46445
46446       void foo(double);
46447
46448       struct A {
46449         template <typename T>
46450         void f () {
46451           foo (1);        // 1
46452           int i = N;      // 2
46453           T t;
46454           t.bar();        // 3
46455           foo (t);        // 4
46456         }
46457
46458         static const int N;
46459       };
46460
46461 Here, the names `foo' and `N' appear in a context that does not depend
46462on the type of `T'.  The compiler will thus require that they are
46463defined in the context of use in the template, not only before the
46464point of instantiation, and will here use `::foo(double)' and `A::N',
46465respectively.  In particular, it will convert the integer value to a
46466`double' when passing it to `::foo(double)'.
46467
46468 Conversely, `bar' and the call to `foo' in the fourth marked line are
46469used in contexts that do depend on the type of `T', so they are only
46470looked up at the point of instantiation, and you can provide
46471declarations for them after declaring the template, but before
46472instantiating it.  In particular, if you instantiate `A::f<int>', the
46473last line will call an overloaded `::foo(int)' if one was provided,
46474even if after the declaration of `struct A'.
46475
46476 This distinction between lookup of dependent and non-dependent names is
46477called two-stage (or dependent) name lookup.  G++ implements it since
46478version 3.4.
46479
46480 Two-stage name lookup sometimes leads to situations with behavior
46481different from non-template codes.  The most common is probably this:
46482
46483       template <typename T> struct Base {
46484         int i;
46485       };
46486
46487       template <typename T> struct Derived : public Base<T> {
46488         int get_i() { return i; }
46489       };
46490
46491 In `get_i()', `i' is not used in a dependent context, so the compiler
46492will look for a name declared at the enclosing namespace scope (which
46493is the global scope here).  It will not look into the base class, since
46494that is dependent and you may declare specializations of `Base' even
46495after declaring `Derived', so the compiler can't really know what `i'
46496would refer to.  If there is no global variable `i', then you will get
46497an error message.
46498
46499 In order to make it clear that you want the member of the base class,
46500you need to defer lookup until instantiation time, at which the base
46501class is known.  For this, you need to access `i' in a dependent
46502context, by either using `this->i' (remember that `this' is of type
46503`Derived<T>*', so is obviously dependent), or using `Base<T>::i'.
46504Alternatively, `Base<T>::i' might be brought into scope by a
46505`using'-declaration.
46506
46507 Another, similar example involves calling member functions of a base
46508class:
46509
46510       template <typename T> struct Base {
46511           int f();
46512       };
46513
46514       template <typename T> struct Derived : Base<T> {
46515           int g() { return f(); };
46516       };
46517
46518 Again, the call to `f()' is not dependent on template arguments (there
46519are no arguments that depend on the type `T', and it is also not
46520otherwise specified that the call should be in a dependent context).
46521Thus a global declaration of such a function must be available, since
46522the one in the base class is not visible until instantiation time.  The
46523compiler will consequently produce the following error message:
46524
46525       x.cc: In member function `int Derived<T>::g()':
46526       x.cc:6: error: there are no arguments to `f' that depend on a template
46527          parameter, so a declaration of `f' must be available
46528       x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
46529          allowing the use of an undeclared name is deprecated)
46530
46531 To make the code valid either use `this->f()', or `Base<T>::f()'.
46532Using the `-fpermissive' flag will also let the compiler accept the
46533code, by marking all function calls for which no declaration is visible
46534at the time of definition of the template for later lookup at
46535instantiation time, as if it were a dependent call.  We do not
46536recommend using `-fpermissive' to work around invalid code, and it will
46537also only catch cases where functions in base classes are called, not
46538where variables in base classes are used (as in the example above).
46539
46540 Note that some compilers (including G++ versions prior to 3.4) get
46541these examples wrong and accept above code without an error.  Those
46542compilers do not implement two-stage name lookup correctly.
46543
46544 ---------- Footnotes ----------
46545
46546 (1) The C++ standard just uses the term "dependent" for names that
46547depend on the type or value of template parameters.  This shorter term
46548will also be used in the rest of this section.
46549
46550
46551File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings
46552
4655311.7.3 Temporaries May Vanish Before You Expect
46554-----------------------------------------------
46555
46556It is dangerous to use pointers or references to _portions_ of a
46557temporary object.  The compiler may very well delete the object before
46558you expect it to, leaving a pointer to garbage.  The most common place
46559where this problem crops up is in classes like string classes,
46560especially ones that define a conversion function to type `char *' or
46561`const char *'--which is one reason why the standard `string' class
46562requires you to call the `c_str' member function.  However, any class
46563that returns a pointer to some internal structure is potentially
46564subject to this problem.
46565
46566 For example, a program may use a function `strfunc' that returns
46567`string' objects, and another function `charfunc' that operates on
46568pointers to `char':
46569
46570     string strfunc ();
46571     void charfunc (const char *);
46572
46573     void
46574     f ()
46575     {
46576       const char *p = strfunc().c_str();
46577       ...
46578       charfunc (p);
46579       ...
46580       charfunc (p);
46581     }
46582
46583In this situation, it may seem reasonable to save a pointer to the C
46584string returned by the `c_str' member function and use that rather than
46585call `c_str' repeatedly.  However, the temporary string created by the
46586call to `strfunc' is destroyed after `p' is initialized, at which point
46587`p' is left pointing to freed memory.
46588
46589 Code like this may run successfully under some other compilers,
46590particularly obsolete cfront-based compilers that delete temporaries
46591along with normal local variables.  However, the GNU C++ behavior is
46592standard-conforming, so if your program depends on late destruction of
46593temporaries it is not portable.
46594
46595 The safe way to write such code is to give the temporary a name, which
46596forces it to remain until the end of the scope of the name.  For
46597example:
46598
46599     const string& tmp = strfunc ();
46600     charfunc (tmp.c_str ());
46601
46602
46603File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings
46604
4660511.7.4 Implicit Copy-Assignment for Virtual Bases
46606-------------------------------------------------
46607
46608When a base class is virtual, only one subobject of the base class
46609belongs to each full object.  Also, the constructors and destructors are
46610invoked only once, and called from the most-derived class.  However,
46611such objects behave unspecified when being assigned.  For example:
46612
46613     struct Base{
46614       char *name;
46615       Base(char *n) : name(strdup(n)){}
46616       Base& operator= (const Base& other){
46617        free (name);
46618        name = strdup (other.name);
46619       }
46620     };
46621
46622     struct A:virtual Base{
46623       int val;
46624       A():Base("A"){}
46625     };
46626
46627     struct B:virtual Base{
46628       int bval;
46629       B():Base("B"){}
46630     };
46631
46632     struct Derived:public A, public B{
46633       Derived():Base("Derived"){}
46634     };
46635
46636     void func(Derived &d1, Derived &d2)
46637     {
46638       d1 = d2;
46639     }
46640
46641 The C++ standard specifies that `Base::Base' is only called once when
46642constructing or copy-constructing a Derived object.  It is unspecified
46643whether `Base::operator=' is called more than once when the implicit
46644copy-assignment for Derived objects is invoked (as it is inside `func'
46645in the example).
46646
46647 G++ implements the "intuitive" algorithm for copy-assignment: assign
46648all direct bases, then assign all members.  In that algorithm, the
46649virtual base subobject can be encountered more than once.  In the
46650example, copying proceeds in the following order: `val', `name' (via
46651`strdup'), `bval', and `name' again.
46652
46653 If application code relies on copy-assignment, a user-defined
46654copy-assignment operator removes any uncertainties.  With such an
46655operator, the application can define whether and how the virtual base
46656subobject is assigned.
46657
46658
46659File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: C++ Misunderstandings,  Up: Trouble
46660
4666111.8 Certain Changes We Don't Want to Make
46662==========================================
46663
46664This section lists changes that people frequently request, but which we
46665do not make because we think GCC is better without them.
46666
46667   * Checking the number and type of arguments to a function which has
46668     an old-fashioned definition and no prototype.
46669
46670     Such a feature would work only occasionally--only for calls that
46671     appear in the same file as the called function, following the
46672     definition.  The only way to check all calls reliably is to add a
46673     prototype for the function.  But adding a prototype eliminates the
46674     motivation for this feature.  So the feature is not worthwhile.
46675
46676   * Warning about using an expression whose type is signed as a shift
46677     count.
46678
46679     Shift count operands are probably signed more often than unsigned.
46680     Warning about this would cause far more annoyance than good.
46681
46682   * Warning about assigning a signed value to an unsigned variable.
46683
46684     Such assignments must be very common; warning about them would
46685     cause more annoyance than good.
46686
46687   * Warning when a non-void function value is ignored.
46688
46689     C contains many standard functions that return a value that most
46690     programs choose to ignore.  One obvious example is `printf'.
46691     Warning about this practice only leads the defensive programmer to
46692     clutter programs with dozens of casts to `void'.  Such casts are
46693     required so frequently that they become visual noise.  Writing
46694     those casts becomes so automatic that they no longer convey useful
46695     information about the intentions of the programmer.  For functions
46696     where the return value should never be ignored, use the
46697     `warn_unused_result' function attribute (*note Function
46698     Attributes::).
46699
46700   * Making `-fshort-enums' the default.
46701
46702     This would cause storage layout to be incompatible with most other
46703     C compilers.  And it doesn't seem very important, given that you
46704     can get the same result in other ways.  The case where it matters
46705     most is when the enumeration-valued object is inside a structure,
46706     and in that case you can specify a field width explicitly.
46707
46708   * Making bit-fields unsigned by default on particular machines where
46709     "the ABI standard" says to do so.
46710
46711     The ISO C standard leaves it up to the implementation whether a
46712     bit-field declared plain `int' is signed or not.  This in effect
46713     creates two alternative dialects of C.
46714
46715     The GNU C compiler supports both dialects; you can specify the
46716     signed dialect with `-fsigned-bitfields' and the unsigned dialect
46717     with `-funsigned-bitfields'.  However, this leaves open the
46718     question of which dialect to use by default.
46719
46720     Currently, the preferred dialect makes plain bit-fields signed,
46721     because this is simplest.  Since `int' is the same as `signed int'
46722     in every other context, it is cleanest for them to be the same in
46723     bit-fields as well.
46724
46725     Some computer manufacturers have published Application Binary
46726     Interface standards which specify that plain bit-fields should be
46727     unsigned.  It is a mistake, however, to say anything about this
46728     issue in an ABI.  This is because the handling of plain bit-fields
46729     distinguishes two dialects of C.  Both dialects are meaningful on
46730     every type of machine.  Whether a particular object file was
46731     compiled using signed bit-fields or unsigned is of no concern to
46732     other object files, even if they access the same bit-fields in the
46733     same data structures.
46734
46735     A given program is written in one or the other of these two
46736     dialects.  The program stands a chance to work on most any machine
46737     if it is compiled with the proper dialect.  It is unlikely to work
46738     at all if compiled with the wrong dialect.
46739
46740     Many users appreciate the GNU C compiler because it provides an
46741     environment that is uniform across machines.  These users would be
46742     inconvenienced if the compiler treated plain bit-fields
46743     differently on certain machines.
46744
46745     Occasionally users write programs intended only for a particular
46746     machine type.  On these occasions, the users would benefit if the
46747     GNU C compiler were to support by default the same dialect as the
46748     other compilers on that machine.  But such applications are rare.
46749     And users writing a program to run on more than one type of
46750     machine cannot possibly benefit from this kind of compatibility.
46751
46752     This is why GCC does and will treat plain bit-fields in the same
46753     fashion on all types of machines (by default).
46754
46755     There are some arguments for making bit-fields unsigned by default
46756     on all machines.  If, for example, this becomes a universal de
46757     facto standard, it would make sense for GCC to go along with it.
46758     This is something to be considered in the future.
46759
46760     (Of course, users strongly concerned about portability should
46761     indicate explicitly in each bit-field whether it is signed or not.
46762     In this way, they write programs which have the same meaning in
46763     both C dialects.)
46764
46765   * Undefining `__STDC__' when `-ansi' is not used.
46766
46767     Currently, GCC defines `__STDC__' unconditionally.  This provides
46768     good results in practice.
46769
46770     Programmers normally use conditionals on `__STDC__' to ask whether
46771     it is safe to use certain features of ISO C, such as function
46772     prototypes or ISO token concatenation.  Since plain `gcc' supports
46773     all the features of ISO C, the correct answer to these questions is
46774     "yes".
46775
46776     Some users try to use `__STDC__' to check for the availability of
46777     certain library facilities.  This is actually incorrect usage in
46778     an ISO C program, because the ISO C standard says that a conforming
46779     freestanding implementation should define `__STDC__' even though it
46780     does not have the library facilities.  `gcc -ansi -pedantic' is a
46781     conforming freestanding implementation, and it is therefore
46782     required to define `__STDC__', even though it does not come with
46783     an ISO C library.
46784
46785     Sometimes people say that defining `__STDC__' in a compiler that
46786     does not completely conform to the ISO C standard somehow violates
46787     the standard.  This is illogical.  The standard is a standard for
46788     compilers that claim to support ISO C, such as `gcc -ansi'--not
46789     for other compilers such as plain `gcc'.  Whatever the ISO C
46790     standard says is relevant to the design of plain `gcc' without
46791     `-ansi' only for pragmatic reasons, not as a requirement.
46792
46793     GCC normally defines `__STDC__' to be 1, and in addition defines
46794     `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std'
46795     option for strict conformance to some version of ISO C.  On some
46796     hosts, system include files use a different convention, where
46797     `__STDC__' is normally 0, but is 1 if the user specifies strict
46798     conformance to the C Standard.  GCC follows the host convention
46799     when processing system include files, but when processing user
46800     files it follows the usual GNU C convention.
46801
46802   * Undefining `__STDC__' in C++.
46803
46804     Programs written to compile with C++-to-C translators get the
46805     value of `__STDC__' that goes with the C compiler that is
46806     subsequently used.  These programs must test `__STDC__' to
46807     determine what kind of C preprocessor that compiler uses: whether
46808     they should concatenate tokens in the ISO C fashion or in the
46809     traditional fashion.
46810
46811     These programs work properly with GNU C++ if `__STDC__' is defined.
46812     They would not work otherwise.
46813
46814     In addition, many header files are written to provide prototypes
46815     in ISO C but not in traditional C.  Many of these header files can
46816     work without change in C++ provided `__STDC__' is defined.  If
46817     `__STDC__' is not defined, they will all fail, and will all need
46818     to be changed to test explicitly for C++ as well.
46819
46820   * Deleting "empty" loops.
46821
46822     Historically, GCC has not deleted "empty" loops under the
46823     assumption that the most likely reason you would put one in a
46824     program is to have a delay, so deleting them will not make real
46825     programs run any faster.
46826
46827     However, the rationale here is that optimization of a nonempty loop
46828     cannot produce an empty one. This held for carefully written C
46829     compiled with less powerful optimizers but is not always the case
46830     for carefully written C++ or with more powerful optimizers.  Thus
46831     GCC will remove operations from loops whenever it can determine
46832     those operations are not externally visible (apart from the time
46833     taken to execute them, of course).  In case the loop can be proved
46834     to be finite, GCC will also remove the loop itself.
46835
46836     Be aware of this when performing timing tests, for instance the
46837     following loop can be completely removed, provided
46838     `some_expression' can provably not change any global state.
46839
46840          {
46841             int sum = 0;
46842             int ix;
46843
46844             for (ix = 0; ix != 10000; ix++)
46845                sum += some_expression;
46846          }
46847
46848     Even though `sum' is accumulated in the loop, no use is made of
46849     that summation, so the accumulation can be removed.
46850
46851   * Making side effects happen in the same order as in some other
46852     compiler.
46853
46854     It is never safe to depend on the order of evaluation of side
46855     effects.  For example, a function call like this may very well
46856     behave differently from one compiler to another:
46857
46858          void func (int, int);
46859
46860          int i = 2;
46861          func (i++, i++);
46862
46863     There is no guarantee (in either the C or the C++ standard language
46864     definitions) that the increments will be evaluated in any
46865     particular order.  Either increment might happen first.  `func'
46866     might get the arguments `2, 3', or it might get `3, 2', or even
46867     `2, 2'.
46868
46869   * Making certain warnings into errors by default.
46870
46871     Some ISO C testsuites report failure when the compiler does not
46872     produce an error message for a certain program.
46873
46874     ISO C requires a "diagnostic" message for certain kinds of invalid
46875     programs, but a warning is defined by GCC to count as a
46876     diagnostic.  If GCC produces a warning but not an error, that is
46877     correct ISO C support.  If testsuites call this "failure", they
46878     should be run with the GCC option `-pedantic-errors', which will
46879     turn these warnings into errors.
46880
46881
46882
46883File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
46884
4688511.9 Warning Messages and Error Messages
46886========================================
46887
46888The GNU compiler can produce two kinds of diagnostics: errors and
46889warnings.  Each kind has a different purpose:
46890
46891     "Errors" report problems that make it impossible to compile your
46892     program.  GCC reports errors with the source file name and line
46893     number where the problem is apparent.
46894
46895     "Warnings" report other unusual conditions in your code that _may_
46896     indicate a problem, although compilation can (and does) proceed.
46897     Warning messages also report the source file name and line number,
46898     but include the text `warning:' to distinguish them from error
46899     messages.
46900
46901 Warnings may indicate danger points where you should check to make sure
46902that your program really does what you intend; or the use of obsolete
46903features; or the use of nonstandard features of GNU C or C++.  Many
46904warnings are issued only if you ask for them, with one of the `-W'
46905options (for instance, `-Wall' requests a variety of useful warnings).
46906
46907 GCC always tries to compile your program if possible; it never
46908gratuitously rejects a program whose meaning is clear merely because
46909(for instance) it fails to conform to a standard.  In some cases,
46910however, the C and C++ standards specify that certain extensions are
46911forbidden, and a diagnostic _must_ be issued by a conforming compiler.
46912The `-pedantic' option tells GCC to issue warnings in such cases;
46913`-pedantic-errors' says to make them errors instead.  This does not
46914mean that _all_ non-ISO constructs get warnings or errors.
46915
46916 *Note Options to Request or Suppress Warnings: Warning Options, for
46917more detail on these and related command-line options.
46918
46919
46920File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
46921
4692212 Reporting Bugs
46923*****************
46924
46925Your bug reports play an essential role in making GCC reliable.
46926
46927 When you encounter a problem, the first thing to do is to see if it is
46928already known.  *Note Trouble::.  If it isn't known, then you should
46929report the problem.
46930
46931* Menu:
46932
46933* Criteria:  Bug Criteria.   Have you really found a bug?
46934* Reporting: Bug Reporting.  How to report a bug effectively.
46935* Known: Trouble.            Known problems.
46936* Help: Service.             Where to ask for help.
46937
46938
46939File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs
46940
4694112.1 Have You Found a Bug?
46942==========================
46943
46944If you are not sure whether you have found a bug, here are some
46945guidelines:
46946
46947   * If the compiler gets a fatal signal, for any input whatever, that
46948     is a compiler bug.  Reliable compilers never crash.
46949
46950   * If the compiler produces invalid assembly code, for any input
46951     whatever (except an `asm' statement), that is a compiler bug,
46952     unless the compiler reports errors (not just warnings) which would
46953     ordinarily prevent the assembler from being run.
46954
46955   * If the compiler produces valid assembly code that does not
46956     correctly execute the input source code, that is a compiler bug.
46957
46958     However, you must double-check to make sure, because you may have a
46959     program whose behavior is undefined, which happened by chance to
46960     give the desired results with another C or C++ compiler.
46961
46962     For example, in many nonoptimizing compilers, you can write `x;'
46963     at the end of a function instead of `return x;', with the same
46964     results.  But the value of the function is undefined if `return'
46965     is omitted; it is not a bug when GCC produces different results.
46966
46967     Problems often result from expressions with two increment
46968     operators, as in `f (*p++, *p++)'.  Your previous compiler might
46969     have interpreted that expression the way you intended; GCC might
46970     interpret it another way.  Neither compiler is wrong.  The bug is
46971     in your code.
46972
46973     After you have localized the error to a single source line, it
46974     should be easy to check for these things.  If your program is
46975     correct and well defined, you have found a compiler bug.
46976
46977   * If the compiler produces an error message for valid input, that is
46978     a compiler bug.
46979
46980   * If the compiler does not produce an error message for invalid
46981     input, that is a compiler bug.  However, you should note that your
46982     idea of "invalid input" might be someone else's idea of "an
46983     extension" or "support for traditional practice".
46984
46985   * If you are an experienced user of one of the languages GCC
46986     supports, your suggestions for improvement of GCC are welcome in
46987     any case.
46988
46989
46990File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
46991
4699212.2 How and where to Report Bugs
46993=================================
46994
46995Bugs should be reported to the bug database at
46996`http://gcc.gnu.org/bugs.html'.
46997
46998
46999File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top
47000
4700113 How To Get Help with GCC
47002***************************
47003
47004If you need help installing, using or changing GCC, there are two ways
47005to find it:
47006
47007   * Send a message to a suitable network mailing list.  First try
47008     <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if
47009     that brings no response, try <gcc@gcc.gnu.org>.  For help changing
47010     GCC, ask <gcc@gcc.gnu.org>.  If you think you have found a bug in
47011     GCC, please report it following the instructions at *note Bug
47012     Reporting::.
47013
47014   * Look in the service directory for someone who might help you for a
47015     fee.  The service directory is found at
47016     `http://www.fsf.org/resources/service'.
47017
47018 For further information, see `http://gcc.gnu.org/faq.html#support'.
47019
47020
47021File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top
47022
4702314 Contributing to GCC Development
47024**********************************
47025
47026If you would like to help pretest GCC releases to assure they work well,
47027current development sources are available by SVN (see
47028`http://gcc.gnu.org/svn.html').  Source and binary snapshots are also
47029available for FTP; see `http://gcc.gnu.org/snapshots.html'.
47030
47031 If you would like to work on improvements to GCC, please read the
47032advice at these URLs:
47033
47034     `http://gcc.gnu.org/contribute.html'
47035     `http://gcc.gnu.org/contributewhy.html'
47036
47037for information on how to make useful contributions and avoid
47038duplication of effort.  Suggested projects are listed at
47039`http://gcc.gnu.org/projects/'.
47040
47041
47042File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top
47043
47044Funding Free Software
47045*********************
47046
47047If you want to have more free software a few years from now, it makes
47048sense for you to help encourage people to contribute funds for its
47049development.  The most effective approach known is to encourage
47050commercial redistributors to donate.
47051
47052 Users of free software systems can boost the pace of development by
47053encouraging for-a-fee distributors to donate part of their selling price
47054to free software developers--the Free Software Foundation, and others.
47055
47056 The way to convince distributors to do this is to demand it and expect
47057it from them.  So when you compare distributors, judge them partly by
47058how much they give to free software development.  Show distributors
47059they must compete to be the one who gives the most.
47060
47061 To make this approach work, you must insist on numbers that you can
47062compare, such as, "We will donate ten dollars to the Frobnitz project
47063for each disk sold."  Don't be satisfied with a vague promise, such as
47064"A portion of the profits are donated," since it doesn't give a basis
47065for comparison.
47066
47067 Even a precise fraction "of the profits from this disk" is not very
47068meaningful, since creative accounting and unrelated business decisions
47069can greatly alter what fraction of the sales price counts as profit.
47070If the price you pay is $50, ten percent of the profit is probably less
47071than a dollar; it might be a few cents, or nothing at all.
47072
47073 Some redistributors do development work themselves.  This is useful
47074too; but to keep everyone honest, you need to inquire how much they do,
47075and what kind.  Some kinds of development make much more long-term
47076difference than others.  For example, maintaining a separate version of
47077a program contributes very little; maintaining the standard version of a
47078program for the whole community contributes much.  Easy new ports
47079contribute little, since someone else would surely do them; difficult
47080ports such as adding a new CPU to the GNU Compiler Collection
47081contribute more; major new features or packages contribute the most.
47082
47083 By establishing the idea that supporting further development is "the
47084proper thing to do" when distributing free software for a fee, we can
47085assure a steady flow of resources into making more free software.
47086
47087     Copyright (C) 1994 Free Software Foundation, Inc.
47088     Verbatim copying and redistribution of this section is permitted
47089     without royalty; alteration is not permitted.
47090
47091
47092File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
47093
47094The GNU Project and GNU/Linux
47095*****************************
47096
47097The GNU Project was launched in 1984 to develop a complete Unix-like
47098operating system which is free software: the GNU system.  (GNU is a
47099recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
47100Variants of the GNU operating system, which use the kernel Linux, are
47101now widely used; though these systems are often referred to as "Linux",
47102they are more accurately called GNU/Linux systems.
47103
47104 For more information, see:
47105     `http://www.gnu.org/'
47106     `http://www.gnu.org/gnu/linux-and-gnu.html'
47107
47108
47109File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
47110
47111GNU General Public License
47112**************************
47113
47114                        Version 3, 29 June 2007
47115
47116     Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/'
47117
47118     Everyone is permitted to copy and distribute verbatim copies of this
47119     license document, but changing it is not allowed.
47120
47121Preamble
47122========
47123
47124The GNU General Public License is a free, copyleft license for software
47125and other kinds of works.
47126
47127 The licenses for most software and other practical works are designed
47128to take away your freedom to share and change the works.  By contrast,
47129the GNU General Public License is intended to guarantee your freedom to
47130share and change all versions of a program-to make sure it remains free
47131software for all its users.  We, the Free Software Foundation, use the
47132GNU General Public License for most of our software; it applies also to
47133any other work released this way by its authors.  You can apply it to
47134your programs, too.
47135
47136 When we speak of free software, we are referring to freedom, not
47137price.  Our General Public Licenses are designed to make sure that you
47138have the freedom to distribute copies of free software (and charge for
47139them if you wish), that you receive source code or can get it if you
47140want it, that you can change the software or use pieces of it in new
47141free programs, and that you know you can do these things.
47142
47143 To protect your rights, we need to prevent others from denying you
47144these rights or asking you to surrender the rights.  Therefore, you
47145have certain responsibilities if you distribute copies of the software,
47146or if you modify it: responsibilities to respect the freedom of others.
47147
47148 For example, if you distribute copies of such a program, whether
47149gratis or for a fee, you must pass on to the recipients the same
47150freedoms that you received.  You must make sure that they, too, receive
47151or can get the source code.  And you must show them these terms so they
47152know their rights.
47153
47154 Developers that use the GNU GPL protect your rights with two steps:
47155(1) assert copyright on the software, and (2) offer you this License
47156giving you legal permission to copy, distribute and/or modify it.
47157
47158 For the developers' and authors' protection, the GPL clearly explains
47159that there is no warranty for this free software.  For both users' and
47160authors' sake, the GPL requires that modified versions be marked as
47161changed, so that their problems will not be attributed erroneously to
47162authors of previous versions.
47163
47164 Some devices are designed to deny users access to install or run
47165modified versions of the software inside them, although the
47166manufacturer can do so.  This is fundamentally incompatible with the
47167aim of protecting users' freedom to change the software.  The
47168systematic pattern of such abuse occurs in the area of products for
47169individuals to use, which is precisely where it is most unacceptable.
47170Therefore, we have designed this version of the GPL to prohibit the
47171practice for those products.  If such problems arise substantially in
47172other domains, we stand ready to extend this provision to those domains
47173in future versions of the GPL, as needed to protect the freedom of
47174users.
47175
47176 Finally, every program is threatened constantly by software patents.
47177States should not allow patents to restrict development and use of
47178software on general-purpose computers, but in those that do, we wish to
47179avoid the special danger that patents applied to a free program could
47180make it effectively proprietary.  To prevent this, the GPL assures that
47181patents cannot be used to render the program non-free.
47182
47183 The precise terms and conditions for copying, distribution and
47184modification follow.
47185
47186TERMS AND CONDITIONS
47187====================
47188
47189  0. Definitions.
47190
47191     "This License" refers to version 3 of the GNU General Public
47192     License.
47193
47194     "Copyright" also means copyright-like laws that apply to other
47195     kinds of works, such as semiconductor masks.
47196
47197     "The Program" refers to any copyrightable work licensed under this
47198     License.  Each licensee is addressed as "you".  "Licensees" and
47199     "recipients" may be individuals or organizations.
47200
47201     To "modify" a work means to copy from or adapt all or part of the
47202     work in a fashion requiring copyright permission, other than the
47203     making of an exact copy.  The resulting work is called a "modified
47204     version" of the earlier work or a work "based on" the earlier work.
47205
47206     A "covered work" means either the unmodified Program or a work
47207     based on the Program.
47208
47209     To "propagate" a work means to do anything with it that, without
47210     permission, would make you directly or secondarily liable for
47211     infringement under applicable copyright law, except executing it
47212     on a computer or modifying a private copy.  Propagation includes
47213     copying, distribution (with or without modification), making
47214     available to the public, and in some countries other activities as
47215     well.
47216
47217     To "convey" a work means any kind of propagation that enables other
47218     parties to make or receive copies.  Mere interaction with a user
47219     through a computer network, with no transfer of a copy, is not
47220     conveying.
47221
47222     An interactive user interface displays "Appropriate Legal Notices"
47223     to the extent that it includes a convenient and prominently visible
47224     feature that (1) displays an appropriate copyright notice, and (2)
47225     tells the user that there is no warranty for the work (except to
47226     the extent that warranties are provided), that licensees may
47227     convey the work under this License, and how to view a copy of this
47228     License.  If the interface presents a list of user commands or
47229     options, such as a menu, a prominent item in the list meets this
47230     criterion.
47231
47232  1. Source Code.
47233
47234     The "source code" for a work means the preferred form of the work
47235     for making modifications to it.  "Object code" means any
47236     non-source form of a work.
47237
47238     A "Standard Interface" means an interface that either is an
47239     official standard defined by a recognized standards body, or, in
47240     the case of interfaces specified for a particular programming
47241     language, one that is widely used among developers working in that
47242     language.
47243
47244     The "System Libraries" of an executable work include anything,
47245     other than the work as a whole, that (a) is included in the normal
47246     form of packaging a Major Component, but which is not part of that
47247     Major Component, and (b) serves only to enable use of the work
47248     with that Major Component, or to implement a Standard Interface
47249     for which an implementation is available to the public in source
47250     code form.  A "Major Component", in this context, means a major
47251     essential component (kernel, window system, and so on) of the
47252     specific operating system (if any) on which the executable work
47253     runs, or a compiler used to produce the work, or an object code
47254     interpreter used to run it.
47255
47256     The "Corresponding Source" for a work in object code form means all
47257     the source code needed to generate, install, and (for an executable
47258     work) run the object code and to modify the work, including
47259     scripts to control those activities.  However, it does not include
47260     the work's System Libraries, or general-purpose tools or generally
47261     available free programs which are used unmodified in performing
47262     those activities but which are not part of the work.  For example,
47263     Corresponding Source includes interface definition files
47264     associated with source files for the work, and the source code for
47265     shared libraries and dynamically linked subprograms that the work
47266     is specifically designed to require, such as by intimate data
47267     communication or control flow between those subprograms and other
47268     parts of the work.
47269
47270     The Corresponding Source need not include anything that users can
47271     regenerate automatically from other parts of the Corresponding
47272     Source.
47273
47274     The Corresponding Source for a work in source code form is that
47275     same work.
47276
47277  2. Basic Permissions.
47278
47279     All rights granted under this License are granted for the term of
47280     copyright on the Program, and are irrevocable provided the stated
47281     conditions are met.  This License explicitly affirms your unlimited
47282     permission to run the unmodified Program.  The output from running
47283     a covered work is covered by this License only if the output,
47284     given its content, constitutes a covered work.  This License
47285     acknowledges your rights of fair use or other equivalent, as
47286     provided by copyright law.
47287
47288     You may make, run and propagate covered works that you do not
47289     convey, without conditions so long as your license otherwise
47290     remains in force.  You may convey covered works to others for the
47291     sole purpose of having them make modifications exclusively for
47292     you, or provide you with facilities for running those works,
47293     provided that you comply with the terms of this License in
47294     conveying all material for which you do not control copyright.
47295     Those thus making or running the covered works for you must do so
47296     exclusively on your behalf, under your direction and control, on
47297     terms that prohibit them from making any copies of your
47298     copyrighted material outside their relationship with you.
47299
47300     Conveying under any other circumstances is permitted solely under
47301     the conditions stated below.  Sublicensing is not allowed; section
47302     10 makes it unnecessary.
47303
47304  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
47305
47306     No covered work shall be deemed part of an effective technological
47307     measure under any applicable law fulfilling obligations under
47308     article 11 of the WIPO copyright treaty adopted on 20 December
47309     1996, or similar laws prohibiting or restricting circumvention of
47310     such measures.
47311
47312     When you convey a covered work, you waive any legal power to forbid
47313     circumvention of technological measures to the extent such
47314     circumvention is effected by exercising rights under this License
47315     with respect to the covered work, and you disclaim any intention
47316     to limit operation or modification of the work as a means of
47317     enforcing, against the work's users, your or third parties' legal
47318     rights to forbid circumvention of technological measures.
47319
47320  4. Conveying Verbatim Copies.
47321
47322     You may convey verbatim copies of the Program's source code as you
47323     receive it, in any medium, provided that you conspicuously and
47324     appropriately publish on each copy an appropriate copyright notice;
47325     keep intact all notices stating that this License and any
47326     non-permissive terms added in accord with section 7 apply to the
47327     code; keep intact all notices of the absence of any warranty; and
47328     give all recipients a copy of this License along with the Program.
47329
47330     You may charge any price or no price for each copy that you convey,
47331     and you may offer support or warranty protection for a fee.
47332
47333  5. Conveying Modified Source Versions.
47334
47335     You may convey a work based on the Program, or the modifications to
47336     produce it from the Program, in the form of source code under the
47337     terms of section 4, provided that you also meet all of these
47338     conditions:
47339
47340       a. The work must carry prominent notices stating that you
47341          modified it, and giving a relevant date.
47342
47343       b. The work must carry prominent notices stating that it is
47344          released under this License and any conditions added under
47345          section 7.  This requirement modifies the requirement in
47346          section 4 to "keep intact all notices".
47347
47348       c. You must license the entire work, as a whole, under this
47349          License to anyone who comes into possession of a copy.  This
47350          License will therefore apply, along with any applicable
47351          section 7 additional terms, to the whole of the work, and all
47352          its parts, regardless of how they are packaged.  This License
47353          gives no permission to license the work in any other way, but
47354          it does not invalidate such permission if you have separately
47355          received it.
47356
47357       d. If the work has interactive user interfaces, each must display
47358          Appropriate Legal Notices; however, if the Program has
47359          interactive interfaces that do not display Appropriate Legal
47360          Notices, your work need not make them do so.
47361
47362     A compilation of a covered work with other separate and independent
47363     works, which are not by their nature extensions of the covered
47364     work, and which are not combined with it such as to form a larger
47365     program, in or on a volume of a storage or distribution medium, is
47366     called an "aggregate" if the compilation and its resulting
47367     copyright are not used to limit the access or legal rights of the
47368     compilation's users beyond what the individual works permit.
47369     Inclusion of a covered work in an aggregate does not cause this
47370     License to apply to the other parts of the aggregate.
47371
47372  6. Conveying Non-Source Forms.
47373
47374     You may convey a covered work in object code form under the terms
47375     of sections 4 and 5, provided that you also convey the
47376     machine-readable Corresponding Source under the terms of this
47377     License, in one of these ways:
47378
47379       a. Convey the object code in, or embodied in, a physical product
47380          (including a physical distribution medium), accompanied by the
47381          Corresponding Source fixed on a durable physical medium
47382          customarily used for software interchange.
47383
47384       b. Convey the object code in, or embodied in, a physical product
47385          (including a physical distribution medium), accompanied by a
47386          written offer, valid for at least three years and valid for
47387          as long as you offer spare parts or customer support for that
47388          product model, to give anyone who possesses the object code
47389          either (1) a copy of the Corresponding Source for all the
47390          software in the product that is covered by this License, on a
47391          durable physical medium customarily used for software
47392          interchange, for a price no more than your reasonable cost of
47393          physically performing this conveying of source, or (2) access
47394          to copy the Corresponding Source from a network server at no
47395          charge.
47396
47397       c. Convey individual copies of the object code with a copy of
47398          the written offer to provide the Corresponding Source.  This
47399          alternative is allowed only occasionally and noncommercially,
47400          and only if you received the object code with such an offer,
47401          in accord with subsection 6b.
47402
47403       d. Convey the object code by offering access from a designated
47404          place (gratis or for a charge), and offer equivalent access
47405          to the Corresponding Source in the same way through the same
47406          place at no further charge.  You need not require recipients
47407          to copy the Corresponding Source along with the object code.
47408          If the place to copy the object code is a network server, the
47409          Corresponding Source may be on a different server (operated
47410          by you or a third party) that supports equivalent copying
47411          facilities, provided you maintain clear directions next to
47412          the object code saying where to find the Corresponding Source.
47413          Regardless of what server hosts the Corresponding Source, you
47414          remain obligated to ensure that it is available for as long
47415          as needed to satisfy these requirements.
47416
47417       e. Convey the object code using peer-to-peer transmission,
47418          provided you inform other peers where the object code and
47419          Corresponding Source of the work are being offered to the
47420          general public at no charge under subsection 6d.
47421
47422
47423     A separable portion of the object code, whose source code is
47424     excluded from the Corresponding Source as a System Library, need
47425     not be included in conveying the object code work.
47426
47427     A "User Product" is either (1) a "consumer product", which means
47428     any tangible personal property which is normally used for personal,
47429     family, or household purposes, or (2) anything designed or sold for
47430     incorporation into a dwelling.  In determining whether a product
47431     is a consumer product, doubtful cases shall be resolved in favor of
47432     coverage.  For a particular product received by a particular user,
47433     "normally used" refers to a typical or common use of that class of
47434     product, regardless of the status of the particular user or of the
47435     way in which the particular user actually uses, or expects or is
47436     expected to use, the product.  A product is a consumer product
47437     regardless of whether the product has substantial commercial,
47438     industrial or non-consumer uses, unless such uses represent the
47439     only significant mode of use of the product.
47440
47441     "Installation Information" for a User Product means any methods,
47442     procedures, authorization keys, or other information required to
47443     install and execute modified versions of a covered work in that
47444     User Product from a modified version of its Corresponding Source.
47445     The information must suffice to ensure that the continued
47446     functioning of the modified object code is in no case prevented or
47447     interfered with solely because modification has been made.
47448
47449     If you convey an object code work under this section in, or with,
47450     or specifically for use in, a User Product, and the conveying
47451     occurs as part of a transaction in which the right of possession
47452     and use of the User Product is transferred to the recipient in
47453     perpetuity or for a fixed term (regardless of how the transaction
47454     is characterized), the Corresponding Source conveyed under this
47455     section must be accompanied by the Installation Information.  But
47456     this requirement does not apply if neither you nor any third party
47457     retains the ability to install modified object code on the User
47458     Product (for example, the work has been installed in ROM).
47459
47460     The requirement to provide Installation Information does not
47461     include a requirement to continue to provide support service,
47462     warranty, or updates for a work that has been modified or
47463     installed by the recipient, or for the User Product in which it
47464     has been modified or installed.  Access to a network may be denied
47465     when the modification itself materially and adversely affects the
47466     operation of the network or violates the rules and protocols for
47467     communication across the network.
47468
47469     Corresponding Source conveyed, and Installation Information
47470     provided, in accord with this section must be in a format that is
47471     publicly documented (and with an implementation available to the
47472     public in source code form), and must require no special password
47473     or key for unpacking, reading or copying.
47474
47475  7. Additional Terms.
47476
47477     "Additional permissions" are terms that supplement the terms of
47478     this License by making exceptions from one or more of its
47479     conditions.  Additional permissions that are applicable to the
47480     entire Program shall be treated as though they were included in
47481     this License, to the extent that they are valid under applicable
47482     law.  If additional permissions apply only to part of the Program,
47483     that part may be used separately under those permissions, but the
47484     entire Program remains governed by this License without regard to
47485     the additional permissions.
47486
47487     When you convey a copy of a covered work, you may at your option
47488     remove any additional permissions from that copy, or from any part
47489     of it.  (Additional permissions may be written to require their own
47490     removal in certain cases when you modify the work.)  You may place
47491     additional permissions on material, added by you to a covered work,
47492     for which you have or can give appropriate copyright permission.
47493
47494     Notwithstanding any other provision of this License, for material
47495     you add to a covered work, you may (if authorized by the copyright
47496     holders of that material) supplement the terms of this License
47497     with terms:
47498
47499       a. Disclaiming warranty or limiting liability differently from
47500          the terms of sections 15 and 16 of this License; or
47501
47502       b. Requiring preservation of specified reasonable legal notices
47503          or author attributions in that material or in the Appropriate
47504          Legal Notices displayed by works containing it; or
47505
47506       c. Prohibiting misrepresentation of the origin of that material,
47507          or requiring that modified versions of such material be
47508          marked in reasonable ways as different from the original
47509          version; or
47510
47511       d. Limiting the use for publicity purposes of names of licensors
47512          or authors of the material; or
47513
47514       e. Declining to grant rights under trademark law for use of some
47515          trade names, trademarks, or service marks; or
47516
47517       f. Requiring indemnification of licensors and authors of that
47518          material by anyone who conveys the material (or modified
47519          versions of it) with contractual assumptions of liability to
47520          the recipient, for any liability that these contractual
47521          assumptions directly impose on those licensors and authors.
47522
47523     All other non-permissive additional terms are considered "further
47524     restrictions" within the meaning of section 10.  If the Program as
47525     you received it, or any part of it, contains a notice stating that
47526     it is governed by this License along with a term that is a further
47527     restriction, you may remove that term.  If a license document
47528     contains a further restriction but permits relicensing or
47529     conveying under this License, you may add to a covered work
47530     material governed by the terms of that license document, provided
47531     that the further restriction does not survive such relicensing or
47532     conveying.
47533
47534     If you add terms to a covered work in accord with this section, you
47535     must place, in the relevant source files, a statement of the
47536     additional terms that apply to those files, or a notice indicating
47537     where to find the applicable terms.
47538
47539     Additional terms, permissive or non-permissive, may be stated in
47540     the form of a separately written license, or stated as exceptions;
47541     the above requirements apply either way.
47542
47543  8. Termination.
47544
47545     You may not propagate or modify a covered work except as expressly
47546     provided under this License.  Any attempt otherwise to propagate or
47547     modify it is void, and will automatically terminate your rights
47548     under this License (including any patent licenses granted under
47549     the third paragraph of section 11).
47550
47551     However, if you cease all violation of this License, then your
47552     license from a particular copyright holder is reinstated (a)
47553     provisionally, unless and until the copyright holder explicitly
47554     and finally terminates your license, and (b) permanently, if the
47555     copyright holder fails to notify you of the violation by some
47556     reasonable means prior to 60 days after the cessation.
47557
47558     Moreover, your license from a particular copyright holder is
47559     reinstated permanently if the copyright holder notifies you of the
47560     violation by some reasonable means, this is the first time you have
47561     received notice of violation of this License (for any work) from
47562     that copyright holder, and you cure the violation prior to 30 days
47563     after your receipt of the notice.
47564
47565     Termination of your rights under this section does not terminate
47566     the licenses of parties who have received copies or rights from
47567     you under this License.  If your rights have been terminated and
47568     not permanently reinstated, you do not qualify to receive new
47569     licenses for the same material under section 10.
47570
47571  9. Acceptance Not Required for Having Copies.
47572
47573     You are not required to accept this License in order to receive or
47574     run a copy of the Program.  Ancillary propagation of a covered work
47575     occurring solely as a consequence of using peer-to-peer
47576     transmission to receive a copy likewise does not require
47577     acceptance.  However, nothing other than this License grants you
47578     permission to propagate or modify any covered work.  These actions
47579     infringe copyright if you do not accept this License.  Therefore,
47580     by modifying or propagating a covered work, you indicate your
47581     acceptance of this License to do so.
47582
47583 10. Automatic Licensing of Downstream Recipients.
47584
47585     Each time you convey a covered work, the recipient automatically
47586     receives a license from the original licensors, to run, modify and
47587     propagate that work, subject to this License.  You are not
47588     responsible for enforcing compliance by third parties with this
47589     License.
47590
47591     An "entity transaction" is a transaction transferring control of an
47592     organization, or substantially all assets of one, or subdividing an
47593     organization, or merging organizations.  If propagation of a
47594     covered work results from an entity transaction, each party to that
47595     transaction who receives a copy of the work also receives whatever
47596     licenses to the work the party's predecessor in interest had or
47597     could give under the previous paragraph, plus a right to
47598     possession of the Corresponding Source of the work from the
47599     predecessor in interest, if the predecessor has it or can get it
47600     with reasonable efforts.
47601
47602     You may not impose any further restrictions on the exercise of the
47603     rights granted or affirmed under this License.  For example, you
47604     may not impose a license fee, royalty, or other charge for
47605     exercise of rights granted under this License, and you may not
47606     initiate litigation (including a cross-claim or counterclaim in a
47607     lawsuit) alleging that any patent claim is infringed by making,
47608     using, selling, offering for sale, or importing the Program or any
47609     portion of it.
47610
47611 11. Patents.
47612
47613     A "contributor" is a copyright holder who authorizes use under this
47614     License of the Program or a work on which the Program is based.
47615     The work thus licensed is called the contributor's "contributor
47616     version".
47617
47618     A contributor's "essential patent claims" are all patent claims
47619     owned or controlled by the contributor, whether already acquired or
47620     hereafter acquired, that would be infringed by some manner,
47621     permitted by this License, of making, using, or selling its
47622     contributor version, but do not include claims that would be
47623     infringed only as a consequence of further modification of the
47624     contributor version.  For purposes of this definition, "control"
47625     includes the right to grant patent sublicenses in a manner
47626     consistent with the requirements of this License.
47627
47628     Each contributor grants you a non-exclusive, worldwide,
47629     royalty-free patent license under the contributor's essential
47630     patent claims, to make, use, sell, offer for sale, import and
47631     otherwise run, modify and propagate the contents of its
47632     contributor version.
47633
47634     In the following three paragraphs, a "patent license" is any
47635     express agreement or commitment, however denominated, not to
47636     enforce a patent (such as an express permission to practice a
47637     patent or covenant not to sue for patent infringement).  To
47638     "grant" such a patent license to a party means to make such an
47639     agreement or commitment not to enforce a patent against the party.
47640
47641     If you convey a covered work, knowingly relying on a patent
47642     license, and the Corresponding Source of the work is not available
47643     for anyone to copy, free of charge and under the terms of this
47644     License, through a publicly available network server or other
47645     readily accessible means, then you must either (1) cause the
47646     Corresponding Source to be so available, or (2) arrange to deprive
47647     yourself of the benefit of the patent license for this particular
47648     work, or (3) arrange, in a manner consistent with the requirements
47649     of this License, to extend the patent license to downstream
47650     recipients.  "Knowingly relying" means you have actual knowledge
47651     that, but for the patent license, your conveying the covered work
47652     in a country, or your recipient's use of the covered work in a
47653     country, would infringe one or more identifiable patents in that
47654     country that you have reason to believe are valid.
47655
47656     If, pursuant to or in connection with a single transaction or
47657     arrangement, you convey, or propagate by procuring conveyance of, a
47658     covered work, and grant a patent license to some of the parties
47659     receiving the covered work authorizing them to use, propagate,
47660     modify or convey a specific copy of the covered work, then the
47661     patent license you grant is automatically extended to all
47662     recipients of the covered work and works based on it.
47663
47664     A patent license is "discriminatory" if it does not include within
47665     the scope of its coverage, prohibits the exercise of, or is
47666     conditioned on the non-exercise of one or more of the rights that
47667     are specifically granted under this License.  You may not convey a
47668     covered work if you are a party to an arrangement with a third
47669     party that is in the business of distributing software, under
47670     which you make payment to the third party based on the extent of
47671     your activity of conveying the work, and under which the third
47672     party grants, to any of the parties who would receive the covered
47673     work from you, a discriminatory patent license (a) in connection
47674     with copies of the covered work conveyed by you (or copies made
47675     from those copies), or (b) primarily for and in connection with
47676     specific products or compilations that contain the covered work,
47677     unless you entered into that arrangement, or that patent license
47678     was granted, prior to 28 March 2007.
47679
47680     Nothing in this License shall be construed as excluding or limiting
47681     any implied license or other defenses to infringement that may
47682     otherwise be available to you under applicable patent law.
47683
47684 12. No Surrender of Others' Freedom.
47685
47686     If conditions are imposed on you (whether by court order,
47687     agreement or otherwise) that contradict the conditions of this
47688     License, they do not excuse you from the conditions of this
47689     License.  If you cannot convey a covered work so as to satisfy
47690     simultaneously your obligations under this License and any other
47691     pertinent obligations, then as a consequence you may not convey it
47692     at all.  For example, if you agree to terms that obligate you to
47693     collect a royalty for further conveying from those to whom you
47694     convey the Program, the only way you could satisfy both those
47695     terms and this License would be to refrain entirely from conveying
47696     the Program.
47697
47698 13. Use with the GNU Affero General Public License.
47699
47700     Notwithstanding any other provision of this License, you have
47701     permission to link or combine any covered work with a work licensed
47702     under version 3 of the GNU Affero General Public License into a
47703     single combined work, and to convey the resulting work.  The terms
47704     of this License will continue to apply to the part which is the
47705     covered work, but the special requirements of the GNU Affero
47706     General Public License, section 13, concerning interaction through
47707     a network will apply to the combination as such.
47708
47709 14. Revised Versions of this License.
47710
47711     The Free Software Foundation may publish revised and/or new
47712     versions of the GNU General Public License from time to time.
47713     Such new versions will be similar in spirit to the present
47714     version, but may differ in detail to address new problems or
47715     concerns.
47716
47717     Each version is given a distinguishing version number.  If the
47718     Program specifies that a certain numbered version of the GNU
47719     General Public License "or any later version" applies to it, you
47720     have the option of following the terms and conditions either of
47721     that numbered version or of any later version published by the
47722     Free Software Foundation.  If the Program does not specify a
47723     version number of the GNU General Public License, you may choose
47724     any version ever published by the Free Software Foundation.
47725
47726     If the Program specifies that a proxy can decide which future
47727     versions of the GNU General Public License can be used, that
47728     proxy's public statement of acceptance of a version permanently
47729     authorizes you to choose that version for the Program.
47730
47731     Later license versions may give you additional or different
47732     permissions.  However, no additional obligations are imposed on any
47733     author or copyright holder as a result of your choosing to follow a
47734     later version.
47735
47736 15. Disclaimer of Warranty.
47737
47738     THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
47739     APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE
47740     COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
47741     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
47742     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
47743     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE
47744     RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
47745     SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
47746     NECESSARY SERVICING, REPAIR OR CORRECTION.
47747
47748 16. Limitation of Liability.
47749
47750     IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
47751     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
47752     AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
47753     FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
47754     CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
47755     THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
47756     BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
47757     PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
47758     PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
47759     THE POSSIBILITY OF SUCH DAMAGES.
47760
47761 17. Interpretation of Sections 15 and 16.
47762
47763     If the disclaimer of warranty and limitation of liability provided
47764     above cannot be given local legal effect according to their terms,
47765     reviewing courts shall apply local law that most closely
47766     approximates an absolute waiver of all civil liability in
47767     connection with the Program, unless a warranty or assumption of
47768     liability accompanies a copy of the Program in return for a fee.
47769
47770
47771END OF TERMS AND CONDITIONS
47772===========================
47773
47774How to Apply These Terms to Your New Programs
47775=============================================
47776
47777If you develop a new program, and you want it to be of the greatest
47778possible use to the public, the best way to achieve this is to make it
47779free software which everyone can redistribute and change under these
47780terms.
47781
47782 To do so, attach the following notices to the program.  It is safest
47783to attach them to the start of each source file to most effectively
47784state the exclusion of warranty; and each file should have at least the
47785"copyright" line and a pointer to where the full notice is found.
47786
47787     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
47788     Copyright (C) YEAR NAME OF AUTHOR
47789
47790     This program is free software: you can redistribute it and/or modify
47791     it under the terms of the GNU General Public License as published by
47792     the Free Software Foundation, either version 3 of the License, or (at
47793     your option) any later version.
47794
47795     This program is distributed in the hope that it will be useful, but
47796     WITHOUT ANY WARRANTY; without even the implied warranty of
47797     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
47798     General Public License for more details.
47799
47800     You should have received a copy of the GNU General Public License
47801     along with this program.  If not, see `http://www.gnu.org/licenses/'.
47802
47803 Also add information on how to contact you by electronic and paper
47804mail.
47805
47806 If the program does terminal interaction, make it output a short
47807notice like this when it starts in an interactive mode:
47808
47809     PROGRAM Copyright (C) YEAR NAME OF AUTHOR
47810     This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
47811     This is free software, and you are welcome to redistribute it
47812     under certain conditions; type `show c' for details.
47813
47814 The hypothetical commands `show w' and `show c' should show the
47815appropriate parts of the General Public License.  Of course, your
47816program's commands might be different; for a GUI interface, you would
47817use an "about box".
47818
47819 You should also get your employer (if you work as a programmer) or
47820school, if any, to sign a "copyright disclaimer" for the program, if
47821necessary.  For more information on this, and how to apply and follow
47822the GNU GPL, see `http://www.gnu.org/licenses/'.
47823
47824 The GNU General Public License does not permit incorporating your
47825program into proprietary programs.  If your program is a subroutine
47826library, you may consider it more useful to permit linking proprietary
47827applications with the library.  If this is what you want to do, use the
47828GNU Lesser General Public License instead of this License.  But first,
47829please read `http://www.gnu.org/philosophy/why-not-lgpl.html'.
47830
47831
47832File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
47833
47834GNU Free Documentation License
47835******************************
47836
47837                     Version 1.3, 3 November 2008
47838
47839     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
47840     `http://fsf.org/'
47841
47842     Everyone is permitted to copy and distribute verbatim copies
47843     of this license document, but changing it is not allowed.
47844
47845  0. PREAMBLE
47846
47847     The purpose of this License is to make a manual, textbook, or other
47848     functional and useful document "free" in the sense of freedom: to
47849     assure everyone the effective freedom to copy and redistribute it,
47850     with or without modifying it, either commercially or
47851     noncommercially.  Secondarily, this License preserves for the
47852     author and publisher a way to get credit for their work, while not
47853     being considered responsible for modifications made by others.
47854
47855     This License is a kind of "copyleft", which means that derivative
47856     works of the document must themselves be free in the same sense.
47857     It complements the GNU General Public License, which is a copyleft
47858     license designed for free software.
47859
47860     We have designed this License in order to use it for manuals for
47861     free software, because free software needs free documentation: a
47862     free program should come with manuals providing the same freedoms
47863     that the software does.  But this License is not limited to
47864     software manuals; it can be used for any textual work, regardless
47865     of subject matter or whether it is published as a printed book.
47866     We recommend this License principally for works whose purpose is
47867     instruction or reference.
47868
47869  1. APPLICABILITY AND DEFINITIONS
47870
47871     This License applies to any manual or other work, in any medium,
47872     that contains a notice placed by the copyright holder saying it
47873     can be distributed under the terms of this License.  Such a notice
47874     grants a world-wide, royalty-free license, unlimited in duration,
47875     to use that work under the conditions stated herein.  The
47876     "Document", below, refers to any such manual or work.  Any member
47877     of the public is a licensee, and is addressed as "you".  You
47878     accept the license if you copy, modify or distribute the work in a
47879     way requiring permission under copyright law.
47880
47881     A "Modified Version" of the Document means any work containing the
47882     Document or a portion of it, either copied verbatim, or with
47883     modifications and/or translated into another language.
47884
47885     A "Secondary Section" is a named appendix or a front-matter section
47886     of the Document that deals exclusively with the relationship of the
47887     publishers or authors of the Document to the Document's overall
47888     subject (or to related matters) and contains nothing that could
47889     fall directly within that overall subject.  (Thus, if the Document
47890     is in part a textbook of mathematics, a Secondary Section may not
47891     explain any mathematics.)  The relationship could be a matter of
47892     historical connection with the subject or with related matters, or
47893     of legal, commercial, philosophical, ethical or political position
47894     regarding them.
47895
47896     The "Invariant Sections" are certain Secondary Sections whose
47897     titles are designated, as being those of Invariant Sections, in
47898     the notice that says that the Document is released under this
47899     License.  If a section does not fit the above definition of
47900     Secondary then it is not allowed to be designated as Invariant.
47901     The Document may contain zero Invariant Sections.  If the Document
47902     does not identify any Invariant Sections then there are none.
47903
47904     The "Cover Texts" are certain short passages of text that are
47905     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
47906     that says that the Document is released under this License.  A
47907     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
47908     be at most 25 words.
47909
47910     A "Transparent" copy of the Document means a machine-readable copy,
47911     represented in a format whose specification is available to the
47912     general public, that is suitable for revising the document
47913     straightforwardly with generic text editors or (for images
47914     composed of pixels) generic paint programs or (for drawings) some
47915     widely available drawing editor, and that is suitable for input to
47916     text formatters or for automatic translation to a variety of
47917     formats suitable for input to text formatters.  A copy made in an
47918     otherwise Transparent file format whose markup, or absence of
47919     markup, has been arranged to thwart or discourage subsequent
47920     modification by readers is not Transparent.  An image format is
47921     not Transparent if used for any substantial amount of text.  A
47922     copy that is not "Transparent" is called "Opaque".
47923
47924     Examples of suitable formats for Transparent copies include plain
47925     ASCII without markup, Texinfo input format, LaTeX input format,
47926     SGML or XML using a publicly available DTD, and
47927     standard-conforming simple HTML, PostScript or PDF designed for
47928     human modification.  Examples of transparent image formats include
47929     PNG, XCF and JPG.  Opaque formats include proprietary formats that
47930     can be read and edited only by proprietary word processors, SGML or
47931     XML for which the DTD and/or processing tools are not generally
47932     available, and the machine-generated HTML, PostScript or PDF
47933     produced by some word processors for output purposes only.
47934
47935     The "Title Page" means, for a printed book, the title page itself,
47936     plus such following pages as are needed to hold, legibly, the
47937     material this License requires to appear in the title page.  For
47938     works in formats which do not have any title page as such, "Title
47939     Page" means the text near the most prominent appearance of the
47940     work's title, preceding the beginning of the body of the text.
47941
47942     The "publisher" means any person or entity that distributes copies
47943     of the Document to the public.
47944
47945     A section "Entitled XYZ" means a named subunit of the Document
47946     whose title either is precisely XYZ or contains XYZ in parentheses
47947     following text that translates XYZ in another language.  (Here XYZ
47948     stands for a specific section name mentioned below, such as
47949     "Acknowledgements", "Dedications", "Endorsements", or "History".)
47950     To "Preserve the Title" of such a section when you modify the
47951     Document means that it remains a section "Entitled XYZ" according
47952     to this definition.
47953
47954     The Document may include Warranty Disclaimers next to the notice
47955     which states that this License applies to the Document.  These
47956     Warranty Disclaimers are considered to be included by reference in
47957     this License, but only as regards disclaiming warranties: any other
47958     implication that these Warranty Disclaimers may have is void and
47959     has no effect on the meaning of this License.
47960
47961  2. VERBATIM COPYING
47962
47963     You may copy and distribute the Document in any medium, either
47964     commercially or noncommercially, provided that this License, the
47965     copyright notices, and the license notice saying this License
47966     applies to the Document are reproduced in all copies, and that you
47967     add no other conditions whatsoever to those of this License.  You
47968     may not use technical measures to obstruct or control the reading
47969     or further copying of the copies you make or distribute.  However,
47970     you may accept compensation in exchange for copies.  If you
47971     distribute a large enough number of copies you must also follow
47972     the conditions in section 3.
47973
47974     You may also lend copies, under the same conditions stated above,
47975     and you may publicly display copies.
47976
47977  3. COPYING IN QUANTITY
47978
47979     If you publish printed copies (or copies in media that commonly
47980     have printed covers) of the Document, numbering more than 100, and
47981     the Document's license notice requires Cover Texts, you must
47982     enclose the copies in covers that carry, clearly and legibly, all
47983     these Cover Texts: Front-Cover Texts on the front cover, and
47984     Back-Cover Texts on the back cover.  Both covers must also clearly
47985     and legibly identify you as the publisher of these copies.  The
47986     front cover must present the full title with all words of the
47987     title equally prominent and visible.  You may add other material
47988     on the covers in addition.  Copying with changes limited to the
47989     covers, as long as they preserve the title of the Document and
47990     satisfy these conditions, can be treated as verbatim copying in
47991     other respects.
47992
47993     If the required texts for either cover are too voluminous to fit
47994     legibly, you should put the first ones listed (as many as fit
47995     reasonably) on the actual cover, and continue the rest onto
47996     adjacent pages.
47997
47998     If you publish or distribute Opaque copies of the Document
47999     numbering more than 100, you must either include a
48000     machine-readable Transparent copy along with each Opaque copy, or
48001     state in or with each Opaque copy a computer-network location from
48002     which the general network-using public has access to download
48003     using public-standard network protocols a complete Transparent
48004     copy of the Document, free of added material.  If you use the
48005     latter option, you must take reasonably prudent steps, when you
48006     begin distribution of Opaque copies in quantity, to ensure that
48007     this Transparent copy will remain thus accessible at the stated
48008     location until at least one year after the last time you
48009     distribute an Opaque copy (directly or through your agents or
48010     retailers) of that edition to the public.
48011
48012     It is requested, but not required, that you contact the authors of
48013     the Document well before redistributing any large number of
48014     copies, to give them a chance to provide you with an updated
48015     version of the Document.
48016
48017  4. MODIFICATIONS
48018
48019     You may copy and distribute a Modified Version of the Document
48020     under the conditions of sections 2 and 3 above, provided that you
48021     release the Modified Version under precisely this License, with
48022     the Modified Version filling the role of the Document, thus
48023     licensing distribution and modification of the Modified Version to
48024     whoever possesses a copy of it.  In addition, you must do these
48025     things in the Modified Version:
48026
48027       A. Use in the Title Page (and on the covers, if any) a title
48028          distinct from that of the Document, and from those of
48029          previous versions (which should, if there were any, be listed
48030          in the History section of the Document).  You may use the
48031          same title as a previous version if the original publisher of
48032          that version gives permission.
48033
48034       B. List on the Title Page, as authors, one or more persons or
48035          entities responsible for authorship of the modifications in
48036          the Modified Version, together with at least five of the
48037          principal authors of the Document (all of its principal
48038          authors, if it has fewer than five), unless they release you
48039          from this requirement.
48040
48041       C. State on the Title page the name of the publisher of the
48042          Modified Version, as the publisher.
48043
48044       D. Preserve all the copyright notices of the Document.
48045
48046       E. Add an appropriate copyright notice for your modifications
48047          adjacent to the other copyright notices.
48048
48049       F. Include, immediately after the copyright notices, a license
48050          notice giving the public permission to use the Modified
48051          Version under the terms of this License, in the form shown in
48052          the Addendum below.
48053
48054       G. Preserve in that license notice the full lists of Invariant
48055          Sections and required Cover Texts given in the Document's
48056          license notice.
48057
48058       H. Include an unaltered copy of this License.
48059
48060       I. Preserve the section Entitled "History", Preserve its Title,
48061          and add to it an item stating at least the title, year, new
48062          authors, and publisher of the Modified Version as given on
48063          the Title Page.  If there is no section Entitled "History" in
48064          the Document, create one stating the title, year, authors,
48065          and publisher of the Document as given on its Title Page,
48066          then add an item describing the Modified Version as stated in
48067          the previous sentence.
48068
48069       J. Preserve the network location, if any, given in the Document
48070          for public access to a Transparent copy of the Document, and
48071          likewise the network locations given in the Document for
48072          previous versions it was based on.  These may be placed in
48073          the "History" section.  You may omit a network location for a
48074          work that was published at least four years before the
48075          Document itself, or if the original publisher of the version
48076          it refers to gives permission.
48077
48078       K. For any section Entitled "Acknowledgements" or "Dedications",
48079          Preserve the Title of the section, and preserve in the
48080          section all the substance and tone of each of the contributor
48081          acknowledgements and/or dedications given therein.
48082
48083       L. Preserve all the Invariant Sections of the Document,
48084          unaltered in their text and in their titles.  Section numbers
48085          or the equivalent are not considered part of the section
48086          titles.
48087
48088       M. Delete any section Entitled "Endorsements".  Such a section
48089          may not be included in the Modified Version.
48090
48091       N. Do not retitle any existing section to be Entitled
48092          "Endorsements" or to conflict in title with any Invariant
48093          Section.
48094
48095       O. Preserve any Warranty Disclaimers.
48096
48097     If the Modified Version includes new front-matter sections or
48098     appendices that qualify as Secondary Sections and contain no
48099     material copied from the Document, you may at your option
48100     designate some or all of these sections as invariant.  To do this,
48101     add their titles to the list of Invariant Sections in the Modified
48102     Version's license notice.  These titles must be distinct from any
48103     other section titles.
48104
48105     You may add a section Entitled "Endorsements", provided it contains
48106     nothing but endorsements of your Modified Version by various
48107     parties--for example, statements of peer review or that the text
48108     has been approved by an organization as the authoritative
48109     definition of a standard.
48110
48111     You may add a passage of up to five words as a Front-Cover Text,
48112     and a passage of up to 25 words as a Back-Cover Text, to the end
48113     of the list of Cover Texts in the Modified Version.  Only one
48114     passage of Front-Cover Text and one of Back-Cover Text may be
48115     added by (or through arrangements made by) any one entity.  If the
48116     Document already includes a cover text for the same cover,
48117     previously added by you or by arrangement made by the same entity
48118     you are acting on behalf of, you may not add another; but you may
48119     replace the old one, on explicit permission from the previous
48120     publisher that added the old one.
48121
48122     The author(s) and publisher(s) of the Document do not by this
48123     License give permission to use their names for publicity for or to
48124     assert or imply endorsement of any Modified Version.
48125
48126  5. COMBINING DOCUMENTS
48127
48128     You may combine the Document with other documents released under
48129     this License, under the terms defined in section 4 above for
48130     modified versions, provided that you include in the combination
48131     all of the Invariant Sections of all of the original documents,
48132     unmodified, and list them all as Invariant Sections of your
48133     combined work in its license notice, and that you preserve all
48134     their Warranty Disclaimers.
48135
48136     The combined work need only contain one copy of this License, and
48137     multiple identical Invariant Sections may be replaced with a single
48138     copy.  If there are multiple Invariant Sections with the same name
48139     but different contents, make the title of each such section unique
48140     by adding at the end of it, in parentheses, the name of the
48141     original author or publisher of that section if known, or else a
48142     unique number.  Make the same adjustment to the section titles in
48143     the list of Invariant Sections in the license notice of the
48144     combined work.
48145
48146     In the combination, you must combine any sections Entitled
48147     "History" in the various original documents, forming one section
48148     Entitled "History"; likewise combine any sections Entitled
48149     "Acknowledgements", and any sections Entitled "Dedications".  You
48150     must delete all sections Entitled "Endorsements."
48151
48152  6. COLLECTIONS OF DOCUMENTS
48153
48154     You may make a collection consisting of the Document and other
48155     documents released under this License, and replace the individual
48156     copies of this License in the various documents with a single copy
48157     that is included in the collection, provided that you follow the
48158     rules of this License for verbatim copying of each of the
48159     documents in all other respects.
48160
48161     You may extract a single document from such a collection, and
48162     distribute it individually under this License, provided you insert
48163     a copy of this License into the extracted document, and follow
48164     this License in all other respects regarding verbatim copying of
48165     that document.
48166
48167  7. AGGREGATION WITH INDEPENDENT WORKS
48168
48169     A compilation of the Document or its derivatives with other
48170     separate and independent documents or works, in or on a volume of
48171     a storage or distribution medium, is called an "aggregate" if the
48172     copyright resulting from the compilation is not used to limit the
48173     legal rights of the compilation's users beyond what the individual
48174     works permit.  When the Document is included in an aggregate, this
48175     License does not apply to the other works in the aggregate which
48176     are not themselves derivative works of the Document.
48177
48178     If the Cover Text requirement of section 3 is applicable to these
48179     copies of the Document, then if the Document is less than one half
48180     of the entire aggregate, the Document's Cover Texts may be placed
48181     on covers that bracket the Document within the aggregate, or the
48182     electronic equivalent of covers if the Document is in electronic
48183     form.  Otherwise they must appear on printed covers that bracket
48184     the whole aggregate.
48185
48186  8. TRANSLATION
48187
48188     Translation is considered a kind of modification, so you may
48189     distribute translations of the Document under the terms of section
48190     4.  Replacing Invariant Sections with translations requires special
48191     permission from their copyright holders, but you may include
48192     translations of some or all Invariant Sections in addition to the
48193     original versions of these Invariant Sections.  You may include a
48194     translation of this License, and all the license notices in the
48195     Document, and any Warranty Disclaimers, provided that you also
48196     include the original English version of this License and the
48197     original versions of those notices and disclaimers.  In case of a
48198     disagreement between the translation and the original version of
48199     this License or a notice or disclaimer, the original version will
48200     prevail.
48201
48202     If a section in the Document is Entitled "Acknowledgements",
48203     "Dedications", or "History", the requirement (section 4) to
48204     Preserve its Title (section 1) will typically require changing the
48205     actual title.
48206
48207  9. TERMINATION
48208
48209     You may not copy, modify, sublicense, or distribute the Document
48210     except as expressly provided under this License.  Any attempt
48211     otherwise to copy, modify, sublicense, or distribute it is void,
48212     and will automatically terminate your rights under this License.
48213
48214     However, if you cease all violation of this License, then your
48215     license from a particular copyright holder is reinstated (a)
48216     provisionally, unless and until the copyright holder explicitly
48217     and finally terminates your license, and (b) permanently, if the
48218     copyright holder fails to notify you of the violation by some
48219     reasonable means prior to 60 days after the cessation.
48220
48221     Moreover, your license from a particular copyright holder is
48222     reinstated permanently if the copyright holder notifies you of the
48223     violation by some reasonable means, this is the first time you have
48224     received notice of violation of this License (for any work) from
48225     that copyright holder, and you cure the violation prior to 30 days
48226     after your receipt of the notice.
48227
48228     Termination of your rights under this section does not terminate
48229     the licenses of parties who have received copies or rights from
48230     you under this License.  If your rights have been terminated and
48231     not permanently reinstated, receipt of a copy of some or all of
48232     the same material does not give you any rights to use it.
48233
48234 10. FUTURE REVISIONS OF THIS LICENSE
48235
48236     The Free Software Foundation may publish new, revised versions of
48237     the GNU Free Documentation License from time to time.  Such new
48238     versions will be similar in spirit to the present version, but may
48239     differ in detail to address new problems or concerns.  See
48240     `http://www.gnu.org/copyleft/'.
48241
48242     Each version of the License is given a distinguishing version
48243     number.  If the Document specifies that a particular numbered
48244     version of this License "or any later version" applies to it, you
48245     have the option of following the terms and conditions either of
48246     that specified version or of any later version that has been
48247     published (not as a draft) by the Free Software Foundation.  If
48248     the Document does not specify a version number of this License,
48249     you may choose any version ever published (not as a draft) by the
48250     Free Software Foundation.  If the Document specifies that a proxy
48251     can decide which future versions of this License can be used, that
48252     proxy's public statement of acceptance of a version permanently
48253     authorizes you to choose that version for the Document.
48254
48255 11. RELICENSING
48256
48257     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
48258     World Wide Web server that publishes copyrightable works and also
48259     provides prominent facilities for anybody to edit those works.  A
48260     public wiki that anybody can edit is an example of such a server.
48261     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
48262     site means any set of copyrightable works thus published on the MMC
48263     site.
48264
48265     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
48266     license published by Creative Commons Corporation, a not-for-profit
48267     corporation with a principal place of business in San Francisco,
48268     California, as well as future copyleft versions of that license
48269     published by that same organization.
48270
48271     "Incorporate" means to publish or republish a Document, in whole or
48272     in part, as part of another Document.
48273
48274     An MMC is "eligible for relicensing" if it is licensed under this
48275     License, and if all works that were first published under this
48276     License somewhere other than this MMC, and subsequently
48277     incorporated in whole or in part into the MMC, (1) had no cover
48278     texts or invariant sections, and (2) were thus incorporated prior
48279     to November 1, 2008.
48280
48281     The operator of an MMC Site may republish an MMC contained in the
48282     site under CC-BY-SA on the same site at any time before August 1,
48283     2009, provided the MMC is eligible for relicensing.
48284
48285
48286ADDENDUM: How to use this License for your documents
48287====================================================
48288
48289To use this License in a document you have written, include a copy of
48290the License in the document and put the following copyright and license
48291notices just after the title page:
48292
48293       Copyright (C)  YEAR  YOUR NAME.
48294       Permission is granted to copy, distribute and/or modify this document
48295       under the terms of the GNU Free Documentation License, Version 1.3
48296       or any later version published by the Free Software Foundation;
48297       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
48298       Texts.  A copy of the license is included in the section entitled ``GNU
48299       Free Documentation License''.
48300
48301 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
48302replace the "with...Texts." line with this:
48303
48304         with the Invariant Sections being LIST THEIR TITLES, with
48305         the Front-Cover Texts being LIST, and with the Back-Cover Texts
48306         being LIST.
48307
48308 If you have Invariant Sections without Cover Texts, or some other
48309combination of the three, merge those two alternatives to suit the
48310situation.
48311
48312 If your document contains nontrivial examples of program code, we
48313recommend releasing these examples in parallel under your choice of
48314free software license, such as the GNU General Public License, to
48315permit their use in free software.
48316
48317
48318File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
48319
48320Contributors to GCC
48321*******************
48322
48323The GCC project would like to thank its many contributors.  Without
48324them the project would not have been nearly as successful as it has
48325been.  Any omissions in this list are accidental.  Feel free to contact
48326<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
48327some of your contributions are not listed.  Please keep this list in
48328alphabetical order.
48329
48330   * Analog Devices helped implement the support for complex data types
48331     and iterators.
48332
48333   * John David Anglin for threading-related fixes and improvements to
48334     libstdc++-v3, and the HP-UX port.
48335
48336   * James van Artsdalen wrote the code that makes efficient use of the
48337     Intel 80387 register stack.
48338
48339   * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
48340     Series port.
48341
48342   * Alasdair Baird for various bug fixes.
48343
48344   * Giovanni Bajo for analyzing lots of complicated C++ problem
48345     reports.
48346
48347   * Peter Barada for his work to improve code generation for new
48348     ColdFire cores.
48349
48350   * Gerald Baumgartner added the signature extension to the C++ front
48351     end.
48352
48353   * Godmar Back for his Java improvements and encouragement.
48354
48355   * Scott Bambrough for help porting the Java compiler.
48356
48357   * Wolfgang Bangerth for processing tons of bug reports.
48358
48359   * Jon Beniston for his Microsoft Windows port of Java and port to
48360     Lattice Mico32.
48361
48362   * Daniel Berlin for better DWARF2 support, faster/better
48363     optimizations, improved alias analysis, plus migrating GCC to
48364     Bugzilla.
48365
48366   * Geoff Berry for his Java object serialization work and various
48367     patches.
48368
48369   * David Binderman tests weekly snapshots of GCC trunk against Fedora
48370     Rawhide for several architectures.
48371
48372   * Uros Bizjak for the implementation of x87 math built-in functions
48373     and for various middle end and i386 back end improvements and bug
48374     fixes.
48375
48376   * Eric Blake for helping to make GCJ and libgcj conform to the
48377     specifications.
48378
48379   * Janne Blomqvist for contributions to GNU Fortran.
48380
48381   * Segher Boessenkool for various fixes.
48382
48383   * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
48384     other Java work.
48385
48386   * Neil Booth for work on cpplib, lang hooks, debug hooks and other
48387     miscellaneous clean-ups.
48388
48389   * Steven Bosscher for integrating the GNU Fortran front end into GCC
48390     and for contributing to the tree-ssa branch.
48391
48392   * Eric Botcazou for fixing middle- and backend bugs left and right.
48393
48394   * Per Bothner for his direction via the steering committee and
48395     various improvements to the infrastructure for supporting new
48396     languages.  Chill front end implementation.  Initial
48397     implementations of cpplib, fix-header, config.guess, libio, and
48398     past C++ library (libg++) maintainer.  Dreaming up, designing and
48399     implementing much of GCJ.
48400
48401   * Devon Bowen helped port GCC to the Tahoe.
48402
48403   * Don Bowman for mips-vxworks contributions.
48404
48405   * Dave Brolley for work on cpplib and Chill.
48406
48407   * Paul Brook for work on the ARM architecture and maintaining GNU
48408     Fortran.
48409
48410   * Robert Brown implemented the support for Encore 32000 systems.
48411
48412   * Christian Bruel for improvements to local store elimination.
48413
48414   * Herman A.J. ten Brugge for various fixes.
48415
48416   * Joerg Brunsmann for Java compiler hacking and help with the GCJ
48417     FAQ.
48418
48419   * Joe Buck for his direction via the steering committee.
48420
48421   * Craig Burley for leadership of the G77 Fortran effort.
48422
48423   * Stephan Buys for contributing Doxygen notes for libstdc++.
48424
48425   * Paolo Carlini for libstdc++ work: lots of efficiency improvements
48426     to the C++ strings, streambufs and formatted I/O, hard detective
48427     work on the frustrating localization issues, and keeping up with
48428     the problem reports.
48429
48430   * John Carr for his alias work, SPARC hacking, infrastructure
48431     improvements, previous contributions to the steering committee,
48432     loop optimizations, etc.
48433
48434   * Stephane Carrez for 68HC11 and 68HC12 ports.
48435
48436   * Steve Chamberlain for support for the Renesas SH and H8 processors
48437     and the PicoJava processor, and for GCJ config fixes.
48438
48439   * Glenn Chambers for help with the GCJ FAQ.
48440
48441   * John-Marc Chandonia for various libgcj patches.
48442
48443   * Denis Chertykov for contributing and maintaining the AVR port, the
48444     first GCC port for an 8-bit architecture.
48445
48446   * Scott Christley for his Objective-C contributions.
48447
48448   * Eric Christopher for his Java porting help and clean-ups.
48449
48450   * Branko Cibej for more warning contributions.
48451
48452   * The GNU Classpath project for all of their merged runtime code.
48453
48454   * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, `--help',
48455     and other random hacking.
48456
48457   * Michael Cook for libstdc++ cleanup patches to reduce warnings.
48458
48459   * R. Kelley Cook for making GCC buildable from a read-only directory
48460     as well as other miscellaneous build process and documentation
48461     clean-ups.
48462
48463   * Ralf Corsepius for SH testing and minor bug fixing.
48464
48465   * Stan Cox for care and feeding of the x86 port and lots of behind
48466     the scenes hacking.
48467
48468   * Alex Crain provided changes for the 3b1.
48469
48470   * Ian Dall for major improvements to the NS32k port.
48471
48472   * Paul Dale for his work to add uClinux platform support to the m68k
48473     backend.
48474
48475   * Dario Dariol contributed the four varieties of sample programs
48476     that print a copy of their source.
48477
48478   * Russell Davidson for fstream and stringstream fixes in libstdc++.
48479
48480   * Bud Davis for work on the G77 and GNU Fortran compilers.
48481
48482   * Mo DeJong for GCJ and libgcj bug fixes.
48483
48484   * DJ Delorie for the DJGPP port, build and libiberty maintenance,
48485     various bug fixes, and the M32C, MeP, and RL78 ports.
48486
48487   * Arnaud Desitter for helping to debug GNU Fortran.
48488
48489   * Gabriel Dos Reis for contributions to G++, contributions and
48490     maintenance of GCC diagnostics infrastructure, libstdc++-v3,
48491     including `valarray<>', `complex<>', maintaining the numerics
48492     library (including that pesky `<limits>' :-) and keeping
48493     up-to-date anything to do with numbers.
48494
48495   * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
48496     ISO C99 support, CFG dumping support, etc., plus support of the
48497     C++ runtime libraries including for all kinds of C interface
48498     issues, contributing and maintaining `complex<>', sanity checking
48499     and disbursement, configuration architecture, libio maintenance,
48500     and early math work.
48501
48502   * Zdenek Dvorak for a new loop unroller and various fixes.
48503
48504   * Michael Eager for his work on the Xilinx MicroBlaze port.
48505
48506   * Richard Earnshaw for his ongoing work with the ARM.
48507
48508   * David Edelsohn for his direction via the steering committee,
48509     ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
48510     loop changes, doing the entire AIX port of libstdc++ with his bare
48511     hands, and for ensuring GCC properly keeps working on AIX.
48512
48513   * Kevin Ediger for the floating point formatting of num_put::do_put
48514     in libstdc++.
48515
48516   * Phil Edwards for libstdc++ work including configuration hackery,
48517     documentation maintainer, chief breaker of the web pages, the
48518     occasional iostream bug fix, and work on shared library symbol
48519     versioning.
48520
48521   * Paul Eggert for random hacking all over GCC.
48522
48523   * Mark Elbrecht for various DJGPP improvements, and for libstdc++
48524     configuration support for locales and fstream-related fixes.
48525
48526   * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
48527     iostreams.
48528
48529   * Christian Ehrhardt for dealing with bug reports.
48530
48531   * Ben Elliston for his work to move the Objective-C runtime into its
48532     own subdirectory and for his work on autoconf.
48533
48534   * Revital Eres for work on the PowerPC 750CL port.
48535
48536   * Marc Espie for OpenBSD support.
48537
48538   * Doug Evans for much of the global optimization framework, arc,
48539     m32r, and SPARC work.
48540
48541   * Christopher Faylor for his work on the Cygwin port and for caring
48542     and feeding the gcc.gnu.org box and saving its users tons of spam.
48543
48544   * Fred Fish for BeOS support and Ada fixes.
48545
48546   * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
48547
48548   * Peter Gerwinski for various bug fixes and the Pascal front end.
48549
48550   * Kaveh R. Ghazi for his direction via the steering committee,
48551     amazing work to make `-W -Wall -W* -Werror' useful, and testing
48552     GCC on a plethora of platforms.  Kaveh extends his gratitude to
48553     the CAIP Center at Rutgers University for providing him with
48554     computing resources to work on Free Software from the late 1980s
48555     to 2010.
48556
48557   * John Gilmore for a donation to the FSF earmarked improving GNU
48558     Java.
48559
48560   * Judy Goldberg for c++ contributions.
48561
48562   * Torbjorn Granlund for various fixes and the c-torture testsuite,
48563     multiply- and divide-by-constant optimization, improved long long
48564     support, improved leaf function register allocation, and his
48565     direction via the steering committee.
48566
48567   * Anthony Green for his `-Os' contributions, the moxie port, and
48568     Java front end work.
48569
48570   * Stu Grossman for gdb hacking, allowing GCJ developers to debug
48571     Java code.
48572
48573   * Michael K. Gschwind contributed the port to the PDP-11.
48574
48575   * Richard Guenther for his ongoing middle-end contributions and bug
48576     fixes and for release management.
48577
48578   * Ron Guilmette implemented the `protoize' and `unprotoize' tools,
48579     the support for Dwarf symbolic debugging information, and much of
48580     the support for System V Release 4.  He has also worked heavily on
48581     the Intel 386 and 860 support.
48582
48583   * Sumanth Gundapaneni for contributing the CR16 port.
48584
48585   * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
48586     GCSE.
48587
48588   * Bruno Haible for improvements in the runtime overhead for EH, new
48589     warnings and assorted bug fixes.
48590
48591   * Andrew Haley for his amazing Java compiler and library efforts.
48592
48593   * Chris Hanson assisted in making GCC work on HP-UX for the 9000
48594     series 300.
48595
48596   * Michael Hayes for various thankless work he's done trying to get
48597     the c30/c40 ports functional.  Lots of loop and unroll
48598     improvements and fixes.
48599
48600   * Dara Hazeghi for wading through myriads of target-specific bug
48601     reports.
48602
48603   * Kate Hedstrom for staking the G77 folks with an initial testsuite.
48604
48605   * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
48606     work, loop opts, and generally fixing lots of old problems we've
48607     ignored for years, flow rewrite and lots of further stuff,
48608     including reviewing tons of patches.
48609
48610   * Aldy Hernandez for working on the PowerPC port, SIMD support, and
48611     various fixes.
48612
48613   * Nobuyuki Hikichi of Software Research Associates, Tokyo,
48614     contributed the support for the Sony NEWS machine.
48615
48616   * Kazu Hirata for caring and feeding the Renesas H8/300 port and
48617     various fixes.
48618
48619   * Katherine Holcomb for work on GNU Fortran.
48620
48621   * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
48622     of testing and bug fixing, particularly of GCC configury code.
48623
48624   * Steve Holmgren for MachTen patches.
48625
48626   * Mat Hostetter for work on the TILE-Gx and TILEPro ports.
48627
48628   * Jan Hubicka for his x86 port improvements.
48629
48630   * Falk Hueffner for working on C and optimization bug reports.
48631
48632   * Bernardo Innocenti for his m68k work, including merging of
48633     ColdFire improvements and uClinux support.
48634
48635   * Christian Iseli for various bug fixes.
48636
48637   * Kamil Iskra for general m68k hacking.
48638
48639   * Lee Iverson for random fixes and MIPS testing.
48640
48641   * Andreas Jaeger for testing and benchmarking of GCC and various bug
48642     fixes.
48643
48644   * Jakub Jelinek for his SPARC work and sibling call optimizations as
48645     well as lots of bug fixes and test cases, and for improving the
48646     Java build system.
48647
48648   * Janis Johnson for ia64 testing and fixes, her quality improvement
48649     sidetracks, and web page maintenance.
48650
48651   * Kean Johnston for SCO OpenServer support and various fixes.
48652
48653   * Tim Josling for the sample language treelang based originally on
48654     Richard Kenner's "toy" language.
48655
48656   * Nicolai Josuttis for additional libstdc++ documentation.
48657
48658   * Klaus Kaempf for his ongoing work to make alpha-vms a viable
48659     target.
48660
48661   * Steven G. Kargl for work on GNU Fortran.
48662
48663   * David Kashtan of SRI adapted GCC to VMS.
48664
48665   * Ryszard Kabatek for many, many libstdc++ bug fixes and
48666     optimizations of strings, especially member functions, and for
48667     auto_ptr fixes.
48668
48669   * Geoffrey Keating for his ongoing work to make the PPC work for
48670     GNU/Linux and his automatic regression tester.
48671
48672   * Brendan Kehoe for his ongoing work with G++ and for a lot of early
48673     work in just about every part of libstdc++.
48674
48675   * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
48676     MIL-STD-1750A.
48677
48678   * Richard Kenner of the New York University Ultracomputer Research
48679     Laboratory wrote the machine descriptions for the AMD 29000, the
48680     DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
48681     support for instruction attributes.  He also made changes to
48682     better support RISC processors including changes to common
48683     subexpression elimination, strength reduction, function calling
48684     sequence handling, and condition code support, in addition to
48685     generalizing the code for frame pointer elimination and delay slot
48686     scheduling.  Richard Kenner was also the head maintainer of GCC
48687     for several years.
48688
48689   * Mumit Khan for various contributions to the Cygwin and Mingw32
48690     ports and maintaining binary releases for Microsoft Windows hosts,
48691     and for massive libstdc++ porting work to Cygwin/Mingw32.
48692
48693   * Robin Kirkham for cpu32 support.
48694
48695   * Mark Klein for PA improvements.
48696
48697   * Thomas Koenig for various bug fixes.
48698
48699   * Bruce Korb for the new and improved fixincludes code.
48700
48701   * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
48702     effort.
48703
48704   * Charles LaBrec contributed the support for the Integrated Solutions
48705     68020 system.
48706
48707   * Asher Langton and Mike Kumbera for contributing Cray pointer
48708     support to GNU Fortran, and for other GNU Fortran improvements.
48709
48710   * Jeff Law for his direction via the steering committee,
48711     coordinating the entire egcs project and GCC 2.95, rolling out
48712     snapshots and releases, handling merges from GCC2, reviewing tons
48713     of patches that might have fallen through the cracks else, and
48714     random but extensive hacking.
48715
48716   * Walter Lee for work on the TILE-Gx and TILEPro ports.
48717
48718   * Marc Lehmann for his direction via the steering committee and
48719     helping with analysis and improvements of x86 performance.
48720
48721   * Victor Leikehman for work on GNU Fortran.
48722
48723   * Ted Lemon wrote parts of the RTL reader and printer.
48724
48725   * Kriang Lerdsuwanakij for C++ improvements including template as
48726     template parameter support, and many C++ fixes.
48727
48728   * Warren Levy for tremendous work on libgcj (Java Runtime Library)
48729     and random work on the Java front end.
48730
48731   * Alain Lichnewsky ported GCC to the MIPS CPU.
48732
48733   * Oskar Liljeblad for hacking on AWT and his many Java bug reports
48734     and patches.
48735
48736   * Robert Lipe for OpenServer support, new testsuites, testing, etc.
48737
48738   * Chen Liqin for various S+core related fixes/improvement, and for
48739     maintaining the S+core port.
48740
48741   * Weiwen Liu for testing and various bug fixes.
48742
48743   * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other
48744     diagnostics fixes and improvements.
48745
48746   * Dave Love for his ongoing work with the Fortran front end and
48747     runtime libraries.
48748
48749   * Martin von Lo"wis for internal consistency checking infrastructure,
48750     various C++ improvements including namespace support, and tons of
48751     assistance with libstdc++/compiler merges.
48752
48753   * H.J. Lu for his previous contributions to the steering committee,
48754     many x86 bug reports, prototype patches, and keeping the GNU/Linux
48755     ports working.
48756
48757   * Greg McGary for random fixes and (someday) bounded pointers.
48758
48759   * Andrew MacLeod for his ongoing work in building a real EH system,
48760     various code generation improvements, work on the global
48761     optimizer, etc.
48762
48763   * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
48764     hacking improvements to compile-time performance, overall
48765     knowledge and direction in the area of instruction scheduling, and
48766     design and implementation of the automaton based instruction
48767     scheduler.
48768
48769   * Bob Manson for his behind the scenes work on dejagnu.
48770
48771   * Philip Martin for lots of libstdc++ string and vector iterator
48772     fixes and improvements, and string clean up and testsuites.
48773
48774   * All of the Mauve project contributors, for Java test code.
48775
48776   * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
48777
48778   * Adam Megacz for his work on the Microsoft Windows port of GCJ.
48779
48780   * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
48781     powerpc, haifa, ECOFF debug support, and other assorted hacking.
48782
48783   * Jason Merrill for his direction via the steering committee and
48784     leading the G++ effort.
48785
48786   * Martin Michlmayr for testing GCC on several architectures using the
48787     entire Debian archive.
48788
48789   * David Miller for his direction via the steering committee, lots of
48790     SPARC work, improvements in jump.c and interfacing with the Linux
48791     kernel developers.
48792
48793   * Gary Miller ported GCC to Charles River Data Systems machines.
48794
48795   * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
48796     the entire libstdc++ testsuite namespace-compatible.
48797
48798   * Mark Mitchell for his direction via the steering committee,
48799     mountains of C++ work, load/store hoisting out of loops, alias
48800     analysis improvements, ISO C `restrict' support, and serving as
48801     release manager from 2000 to 2011.
48802
48803   * Alan Modra for various GNU/Linux bits and testing.
48804
48805   * Toon Moene for his direction via the steering committee, Fortran
48806     maintenance, and his ongoing work to make us make Fortran run fast.
48807
48808   * Jason Molenda for major help in the care and feeding of all the
48809     services on the gcc.gnu.org (formerly egcs.cygnus.com)
48810     machine--mail, web services, ftp services, etc etc.  Doing all
48811     this work on scrap paper and the backs of envelopes would have
48812     been... difficult.
48813
48814   * Catherine Moore for fixing various ugly problems we have sent her
48815     way, including the haifa bug which was killing the Alpha & PowerPC
48816     Linux kernels.
48817
48818   * Mike Moreton for his various Java patches.
48819
48820   * David Mosberger-Tang for various Alpha improvements, and for the
48821     initial IA-64 port.
48822
48823   * Stephen Moshier contributed the floating point emulator that
48824     assists in cross-compilation and permits support for floating
48825     point numbers wider than 64 bits and for ISO C99 support.
48826
48827   * Bill Moyer for his behind the scenes work on various issues.
48828
48829   * Philippe De Muyter for his work on the m68k port.
48830
48831   * Joseph S. Myers for his work on the PDP-11 port, format checking
48832     and ISO C99 support, and continuous emphasis on (and contributions
48833     to) documentation.
48834
48835   * Nathan Myers for his work on libstdc++-v3: architecture and
48836     authorship through the first three snapshots, including
48837     implementation of locale infrastructure, string, shadow C headers,
48838     and the initial project documentation (DESIGN, CHECKLIST, and so
48839     forth).  Later, more work on MT-safe string and shadow headers.
48840
48841   * Felix Natter for documentation on porting libstdc++.
48842
48843   * Nathanael Nerode for cleaning up the configuration/build process.
48844
48845   * NeXT, Inc. donated the front end that supports the Objective-C
48846     language.
48847
48848   * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
48849     the search engine setup, various documentation fixes and other
48850     small fixes.
48851
48852   * Geoff Noer for his work on getting cygwin native builds working.
48853
48854   * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
48855     tracking web pages, GIMPLE tuples, and assorted fixes.
48856
48857   * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
48858     FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and
48859     related infrastructure improvements.
48860
48861   * Alexandre Oliva for various build infrastructure improvements,
48862     scripts and amazing testing work, including keeping libtool issues
48863     sane and happy.
48864
48865   * Stefan Olsson for work on mt_alloc.
48866
48867   * Melissa O'Neill for various NeXT fixes.
48868
48869   * Rainer Orth for random MIPS work, including improvements to GCC's
48870     o32 ABI support, improvements to dejagnu's MIPS support, Java
48871     configuration clean-ups and porting work, and maintaining the
48872     IRIX, Solaris 2, and Tru64 UNIX ports.
48873
48874   * Hartmut Penner for work on the s390 port.
48875
48876   * Paul Petersen wrote the machine description for the Alliant FX/8.
48877
48878   * Alexandre Petit-Bianco for implementing much of the Java compiler
48879     and continued Java maintainership.
48880
48881   * Matthias Pfaller for major improvements to the NS32k port.
48882
48883   * Gerald Pfeifer for his direction via the steering committee,
48884     pointing out lots of problems we need to solve, maintenance of the
48885     web pages, and taking care of documentation maintenance in general.
48886
48887   * Andrew Pinski for processing bug reports by the dozen.
48888
48889   * Ovidiu Predescu for his work on the Objective-C front end and
48890     runtime libraries.
48891
48892   * Jerry Quinn for major performance improvements in C++ formatted
48893     I/O.
48894
48895   * Ken Raeburn for various improvements to checker, MIPS ports and
48896     various cleanups in the compiler.
48897
48898   * Rolf W. Rasmussen for hacking on AWT.
48899
48900   * David Reese of Sun Microsystems contributed to the Solaris on
48901     PowerPC port.
48902
48903   * Volker Reichelt for keeping up with the problem reports.
48904
48905   * Joern Rennecke for maintaining the sh port, loop, regmove & reload
48906     hacking and developing and maintaining the Epiphany port.
48907
48908   * Loren J. Rittle for improvements to libstdc++-v3 including the
48909     FreeBSD port, threading fixes, thread-related configury changes,
48910     critical threading documentation, and solutions to really tricky
48911     I/O problems, as well as keeping GCC properly working on FreeBSD
48912     and continuous testing.
48913
48914   * Craig Rodrigues for processing tons of bug reports.
48915
48916   * Ola Ro"nnerup for work on mt_alloc.
48917
48918   * Gavin Romig-Koch for lots of behind the scenes MIPS work.
48919
48920   * David Ronis inspired and encouraged Craig to rewrite the G77
48921     documentation in texinfo format by contributing a first pass at a
48922     translation of the old `g77-0.5.16/f/DOC' file.
48923
48924   * Ken Rose for fixes to GCC's delay slot filling code.
48925
48926   * Paul Rubin wrote most of the preprocessor.
48927
48928   * Pe'tur Runo'lfsson for major performance improvements in C++
48929     formatted I/O and large file support in C++ filebuf.
48930
48931   * Chip Salzenberg for libstdc++ patches and improvements to locales,
48932     traits, Makefiles, libio, libtool hackery, and "long long" support.
48933
48934   * Juha Sarlin for improvements to the H8 code generator.
48935
48936   * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
48937     300.
48938
48939   * Roger Sayle for improvements to constant folding and GCC's RTL
48940     optimizers as well as for fixing numerous bugs.
48941
48942   * Bradley Schatz for his work on the GCJ FAQ.
48943
48944   * Peter Schauer wrote the code to allow debugging to work on the
48945     Alpha.
48946
48947   * William Schelter did most of the work on the Intel 80386 support.
48948
48949   * Tobias Schlu"ter for work on GNU Fortran.
48950
48951   * Bernd Schmidt for various code generation improvements and major
48952     work in the reload pass, serving as release manager for GCC
48953     2.95.3, and work on the Blackfin and C6X ports.
48954
48955   * Peter Schmid for constant testing of libstdc++--especially
48956     application testing, going above and beyond what was requested for
48957     the release criteria--and libstdc++ header file tweaks.
48958
48959   * Jason Schroeder for jcf-dump patches.
48960
48961   * Andreas Schwab for his work on the m68k port.
48962
48963   * Lars Segerlund for work on GNU Fortran.
48964
48965   * Dodji Seketeli for numerous C++ bug fixes and debug info
48966     improvements.
48967
48968   * Joel Sherrill for his direction via the steering committee, RTEMS
48969     contributions and RTEMS testing.
48970
48971   * Nathan Sidwell for many C++ fixes/improvements.
48972
48973   * Jeffrey Siegal for helping RMS with the original design of GCC,
48974     some code which handles the parse tree and RTL data structures,
48975     constant folding and help with the original VAX & m68k ports.
48976
48977   * Kenny Simpson for prompting libstdc++ fixes due to defect reports
48978     from the LWG (thereby keeping GCC in line with updates from the
48979     ISO).
48980
48981   * Franz Sirl for his ongoing work with making the PPC port stable
48982     for GNU/Linux.
48983
48984   * Andrey Slepuhin for assorted AIX hacking.
48985
48986   * Trevor Smigiel for contributing the SPU port.
48987
48988   * Christopher Smith did the port for Convex machines.
48989
48990   * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
48991
48992   * Randy Smith finished the Sun FPA support.
48993
48994   * Scott Snyder for queue, iterator, istream, and string fixes and
48995     libstdc++ testsuite entries.  Also for providing the patch to G77
48996     to add rudimentary support for `INTEGER*1', `INTEGER*2', and
48997     `LOGICAL*1'.
48998
48999   * Zdenek Sojka for running automated regression testing of GCC and
49000     reporting numerous bugs.
49001
49002   * Jayant Sonar for contributing the CR16 port.
49003
49004   * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
49005
49006   * Richard Stallman, for writing the original GCC and launching the
49007     GNU project.
49008
49009   * Jan Stein of the Chalmers Computer Society provided support for
49010     Genix, as well as part of the 32000 machine description.
49011
49012   * Nigel Stephens for various mips16 related fixes/improvements.
49013
49014   * Jonathan Stone wrote the machine description for the Pyramid
49015     computer.
49016
49017   * Graham Stott for various infrastructure improvements.
49018
49019   * John Stracke for his Java HTTP protocol fixes.
49020
49021   * Mike Stump for his Elxsi port, G++ contributions over the years
49022     and more recently his vxworks contributions
49023
49024   * Jeff Sturm for Java porting help, bug fixes, and encouragement.
49025
49026   * Shigeya Suzuki for this fixes for the bsdi platforms.
49027
49028   * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
49029     support, general configury hacking, fixincludes, etc.
49030
49031   * Holger Teutsch provided the support for the Clipper CPU.
49032
49033   * Gary Thomas for his ongoing work to make the PPC work for
49034     GNU/Linux.
49035
49036   * Philipp Thomas for random bug fixes throughout the compiler
49037
49038   * Jason Thorpe for thread support in libstdc++ on NetBSD.
49039
49040   * Kresten Krab Thorup wrote the run time support for the Objective-C
49041     language and the fantastic Java bytecode interpreter.
49042
49043   * Michael Tiemann for random bug fixes, the first instruction
49044     scheduler, initial C++ support, function integration, NS32k, SPARC
49045     and M88k machine description work, delay slot scheduling.
49046
49047   * Andreas Tobler for his work porting libgcj to Darwin.
49048
49049   * Teemu Torma for thread safe exception handling support.
49050
49051   * Leonard Tower wrote parts of the parser, RTL generator, and RTL
49052     definitions, and of the VAX machine description.
49053
49054   * Daniel Towner and Hariharan Sandanagobalane contributed and
49055     maintain the picoChip port.
49056
49057   * Tom Tromey for internationalization support and for his many Java
49058     contributions and libgcj maintainership.
49059
49060   * Lassi Tuura for improvements to config.guess to determine HP
49061     processor types.
49062
49063   * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
49064
49065   * Andy Vaught for the design and initial implementation of the GNU
49066     Fortran front end.
49067
49068   * Brent Verner for work with the libstdc++ cshadow files and their
49069     associated configure steps.
49070
49071   * Todd Vierling for contributions for NetBSD ports.
49072
49073   * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
49074     guidance.
49075
49076   * Dean Wakerley for converting the install documentation from HTML
49077     to texinfo in time for GCC 3.0.
49078
49079   * Krister Walfridsson for random bug fixes.
49080
49081   * Feng Wang for contributions to GNU Fortran.
49082
49083   * Stephen M. Webb for time and effort on making libstdc++ shadow
49084     files work with the tricky Solaris 8+ headers, and for pushing the
49085     build-time header tree.
49086
49087   * John Wehle for various improvements for the x86 code generator,
49088     related infrastructure improvements to help x86 code generation,
49089     value range propagation and other work, WE32k port.
49090
49091   * Ulrich Weigand for work on the s390 port.
49092
49093   * Zack Weinberg for major work on cpplib and various other bug fixes.
49094
49095   * Matt Welsh for help with Linux Threads support in GCJ.
49096
49097   * Urban Widmark for help fixing java.io.
49098
49099   * Mark Wielaard for new Java library code and his work integrating
49100     with Classpath.
49101
49102   * Dale Wiles helped port GCC to the Tahoe.
49103
49104   * Bob Wilson from Tensilica, Inc. for the Xtensa port.
49105
49106   * Jim Wilson for his direction via the steering committee, tackling
49107     hard problems in various places that nobody else wanted to work
49108     on, strength reduction and other loop optimizations.
49109
49110   * Paul Woegerer and Tal Agmon for the CRX port.
49111
49112   * Carlo Wood for various fixes.
49113
49114   * Tom Wood for work on the m88k port.
49115
49116   * Canqun Yang for work on GNU Fortran.
49117
49118   * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
49119     description for the Tron architecture (specifically, the Gmicro).
49120
49121   * Kevin Zachmann helped port GCC to the Tahoe.
49122
49123   * Ayal Zaks for Swing Modulo Scheduling (SMS).
49124
49125   * Xiaoqiang Zhang for work on GNU Fortran.
49126
49127   * Gilles Zunino for help porting Java to Irix.
49128
49129
49130 The following people are recognized for their contributions to GNAT,
49131the Ada front end of GCC:
49132   * Bernard Banner
49133
49134   * Romain Berrendonner
49135
49136   * Geert Bosch
49137
49138   * Emmanuel Briot
49139
49140   * Joel Brobecker
49141
49142   * Ben Brosgol
49143
49144   * Vincent Celier
49145
49146   * Arnaud Charlet
49147
49148   * Chien Chieng
49149
49150   * Cyrille Comar
49151
49152   * Cyrille Crozes
49153
49154   * Robert Dewar
49155
49156   * Gary Dismukes
49157
49158   * Robert Duff
49159
49160   * Ed Falis
49161
49162   * Ramon Fernandez
49163
49164   * Sam Figueroa
49165
49166   * Vasiliy Fofanov
49167
49168   * Michael Friess
49169
49170   * Franco Gasperoni
49171
49172   * Ted Giering
49173
49174   * Matthew Gingell
49175
49176   * Laurent Guerby
49177
49178   * Jerome Guitton
49179
49180   * Olivier Hainque
49181
49182   * Jerome Hugues
49183
49184   * Hristian Kirtchev
49185
49186   * Jerome Lambourg
49187
49188   * Bruno Leclerc
49189
49190   * Albert Lee
49191
49192   * Sean McNeil
49193
49194   * Javier Miranda
49195
49196   * Laurent Nana
49197
49198   * Pascal Obry
49199
49200   * Dong-Ik Oh
49201
49202   * Laurent Pautet
49203
49204   * Brett Porter
49205
49206   * Thomas Quinot
49207
49208   * Nicolas Roche
49209
49210   * Pat Rogers
49211
49212   * Jose Ruiz
49213
49214   * Douglas Rupp
49215
49216   * Sergey Rybin
49217
49218   * Gail Schenker
49219
49220   * Ed Schonberg
49221
49222   * Nicolas Setton
49223
49224   * Samuel Tardieu
49225
49226
49227 The following people are recognized for their contributions of new
49228features, bug reports, testing and integration of classpath/libgcj for
49229GCC version 4.1:
49230   * Lillian Angel for `JTree' implementation and lots Free Swing
49231     additions and bug fixes.
49232
49233   * Wolfgang Baer for `GapContent' bug fixes.
49234
49235   * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse
49236     event fixes, lots of Free Swing work including `JTable' editing.
49237
49238   * Stuart Ballard for RMI constant fixes.
49239
49240   * Goffredo Baroncelli for `HTTPURLConnection' fixes.
49241
49242   * Gary Benson for `MessageFormat' fixes.
49243
49244   * Daniel Bonniot for `Serialization' fixes.
49245
49246   * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX'
49247     and `DOM xml:id' support.
49248
49249   * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes.
49250
49251   * Archie Cobbs for build fixes, VM interface updates,
49252     `URLClassLoader' updates.
49253
49254   * Kelley Cook for build fixes.
49255
49256   * Martin Cordova for Suggestions for better `SocketTimeoutException'.
49257
49258   * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite
49259     and improvements.
49260
49261   * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
49262     2D support. Lots of imageio framework additions, lots of AWT and
49263     Free Swing bug fixes.
49264
49265   * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization
49266     fixes, better `Proxy' support, bug fixes and IKVM integration.
49267
49268   * Santiago Gala for `AccessControlContext' fixes.
49269
49270   * Nicolas Geoffray for `VMClassLoader' and `AccessController'
49271     improvements.
49272
49273   * David Gilbert for `basic' and `metal' icon and plaf support and
49274     lots of documenting, Lots of Free Swing and metal theme additions.
49275     `MetalIconFactory' implementation.
49276
49277   * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers.
49278
49279   * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj
49280     build speedups.
49281
49282   * Kim Ho for `JFileChooser' implementation.
49283
49284   * Andrew John Hughes for `Locale' and net fixes, URI RFC2986
49285     updates, `Serialization' fixes, `Properties' XML support and
49286     generic branch work, VMIntegration guide update.
49287
49288   * Bastiaan Huisman for `TimeZone' bug fixing.
49289
49290   * Andreas Jaeger for mprec updates.
49291
49292   * Paul Jenner for better `-Werror' support.
49293
49294   * Ito Kazumitsu for `NetworkInterface' implementation and updates.
49295
49296   * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus
49297     bug fixes all over. Lots of Free Swing work including styled text.
49298
49299   * Simon Kitching for `String' cleanups and optimization suggestions.
49300
49301   * Michael Koch for configuration fixes, `Locale' updates, bug and
49302     build fixes.
49303
49304   * Guilhem Lavaux for configuration, thread and channel fixes and
49305     Kaffe integration. JCL native `Pointer' updates. Logger bug fixes.
49306
49307   * David Lichteblau for JCL support library global/local reference
49308     cleanups.
49309
49310   * Aaron Luchko for JDWP updates and documentation fixes.
49311
49312   * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex
49313     features.
49314
49315   * Sven de Marothy for BMP imageio support, CSS and `TextLayout'
49316     fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes
49317     and implementing the Qt4 peers.
49318
49319   * Casey Marshall for crypto algorithm fixes, `FileChannel' lock,
49320     `SystemLogger' and `FileHandler' rotate implementations, NIO
49321     `FileChannel.map' support, security and policy updates.
49322
49323   * Bryce McKinlay for RMI work.
49324
49325   * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
49326     testing and documenting.
49327
49328   * Kalle Olavi Niemitalo for build fixes.
49329
49330   * Rainer Orth for build fixes.
49331
49332   * Andrew Overholt for `File' locking fixes.
49333
49334   * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates.
49335
49336   * Olga Rodimina for `MenuSelectionManager' implementation.
49337
49338   * Jan Roehrich for `BasicTreeUI' and `JTree' fixes.
49339
49340   * Julian Scheid for documentation updates and gjdoc support.
49341
49342   * Christian Schlichtherle for zip fixes and cleanups.
49343
49344   * Robert Schuster for documentation updates and beans fixes,
49345     `TreeNode' enumerations and `ActionCommand' and various fixes, XML
49346     and URL, AWT and Free Swing bug fixes.
49347
49348   * Keith Seitz for lots of JDWP work.
49349
49350   * Christian Thalinger for 64-bit cleanups, Configuration and VM
49351     interface fixes and `CACAO' integration, `fdlibm' updates.
49352
49353   * Gael Thomas for `VMClassLoader' boot packages support suggestions.
49354
49355   * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4'
49356     support for Darwin/OS X, `Graphics2D' support, `gtk+' updates.
49357
49358   * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe
49359     integration. `Qt4' build infrastructure, `SHA1PRNG' and
49360     `GdkPixbugDecoder' updates.
49361
49362   * Tom Tromey for Eclipse integration, generics work, lots of bug
49363     fixes and gcj integration including coordinating The Big Merge.
49364
49365   * Mark Wielaard for bug fixes, packaging and release management,
49366     `Clipboard' implementation, system call interrupts and network
49367     timeouts and `GdkPixpufDecoder' fixes.
49368
49369
49370 In addition to the above, all of which also contributed time and
49371energy in testing GCC, we would like to thank the following for their
49372contributions to testing:
49373
49374   * Michael Abd-El-Malek
49375
49376   * Thomas Arend
49377
49378   * Bonzo Armstrong
49379
49380   * Steven Ashe
49381
49382   * Chris Baldwin
49383
49384   * David Billinghurst
49385
49386   * Jim Blandy
49387
49388   * Stephane Bortzmeyer
49389
49390   * Horst von Brand
49391
49392   * Frank Braun
49393
49394   * Rodney Brown
49395
49396   * Sidney Cadot
49397
49398   * Bradford Castalia
49399
49400   * Robert Clark
49401
49402   * Jonathan Corbet
49403
49404   * Ralph Doncaster
49405
49406   * Richard Emberson
49407
49408   * Levente Farkas
49409
49410   * Graham Fawcett
49411
49412   * Mark Fernyhough
49413
49414   * Robert A. French
49415
49416   * Jo"rgen Freyh
49417
49418   * Mark K. Gardner
49419
49420   * Charles-Antoine Gauthier
49421
49422   * Yung Shing Gene
49423
49424   * David Gilbert
49425
49426   * Simon Gornall
49427
49428   * Fred Gray
49429
49430   * John Griffin
49431
49432   * Patrik Hagglund
49433
49434   * Phil Hargett
49435
49436   * Amancio Hasty
49437
49438   * Takafumi Hayashi
49439
49440   * Bryan W. Headley
49441
49442   * Kevin B. Hendricks
49443
49444   * Joep Jansen
49445
49446   * Christian Joensson
49447
49448   * Michel Kern
49449
49450   * David Kidd
49451
49452   * Tobias Kuipers
49453
49454   * Anand Krishnaswamy
49455
49456   * A. O. V. Le Blanc
49457
49458   * llewelly
49459
49460   * Damon Love
49461
49462   * Brad Lucier
49463
49464   * Matthias Klose
49465
49466   * Martin Knoblauch
49467
49468   * Rick Lutowski
49469
49470   * Jesse Macnish
49471
49472   * Stefan Morrell
49473
49474   * Anon A. Mous
49475
49476   * Matthias Mueller
49477
49478   * Pekka Nikander
49479
49480   * Rick Niles
49481
49482   * Jon Olson
49483
49484   * Magnus Persson
49485
49486   * Chris Pollard
49487
49488   * Richard Polton
49489
49490   * Derk Reefman
49491
49492   * David Rees
49493
49494   * Paul Reilly
49495
49496   * Tom Reilly
49497
49498   * Torsten Rueger
49499
49500   * Danny Sadinoff
49501
49502   * Marc Schifer
49503
49504   * Erik Schnetter
49505
49506   * Wayne K. Schroll
49507
49508   * David Schuler
49509
49510   * Vin Shelton
49511
49512   * Tim Souder
49513
49514   * Adam Sulmicki
49515
49516   * Bill Thorson
49517
49518   * George Talbot
49519
49520   * Pedro A. M. Vazquez
49521
49522   * Gregory Warnes
49523
49524   * Ian Watson
49525
49526   * David E. Young
49527
49528   * And many others
49529
49530 And finally we'd like to thank everyone who uses the compiler, provides
49531feedback and generally reminds us why we're doing this work in the first
49532place.
49533
49534
49535File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top
49536
49537Option Index
49538************
49539
49540GCC's command line options are indexed here without any initial `-' or
49541`--'.  Where an option has both positive and negative forms (such as
49542`-fOPTION' and `-fno-OPTION'), relevant entries in the manual are
49543indexed under the most appropriate form; it may sometimes be useful to
49544look up both forms.
49545
49546�[index�]
49547* Menu:
49548
49549* ###:                                   Overall Options.    (line  209)
49550* -fno-keep-inline-dllexport:            Optimize Options.   (line  319)
49551* -mcpu:                                 RX Options.         (line   30)
49552* -mfix-cortex-a53-835769:               AArch64 Options.    (line   56)
49553* -mno-fix-cortex-a53-835769:            AArch64 Options.    (line   56)
49554* -mpointer-size=SIZE:                   VMS Options.        (line   20)
49555* 8bit-idiv:                             i386 and x86-64 Options.
49556                                                             (line  824)
49557* A:                                     Preprocessor Options.
49558                                                             (line  597)
49559* all_load:                              Darwin Options.     (line  110)
49560* allowable_client:                      Darwin Options.     (line  196)
49561* ansi <1>:                              Non-bugs.           (line  107)
49562* ansi <2>:                              Other Builtins.     (line   22)
49563* ansi <3>:                              Preprocessor Options.
49564                                                             (line  338)
49565* ansi <4>:                              C Dialect Options.  (line   11)
49566* ansi:                                  Standards.          (line   16)
49567* arch_errors_fatal:                     Darwin Options.     (line  114)
49568* aux-info:                              C Dialect Options.  (line  168)
49569* avx256-split-unaligned-load:           i386 and x86-64 Options.
49570                                                             (line  832)
49571* avx256-split-unaligned-store:          i386 and x86-64 Options.
49572                                                             (line  832)
49573* B:                                     Directory Options.  (line   46)
49574* Bdynamic:                              VxWorks Options.    (line   22)
49575* bind_at_load:                          Darwin Options.     (line  118)
49576* Bstatic:                               VxWorks Options.    (line   22)
49577* bundle:                                Darwin Options.     (line  123)
49578* bundle_loader:                         Darwin Options.     (line  127)
49579* c:                                     Link Options.       (line   20)
49580* C:                                     Preprocessor Options.
49581                                                             (line  655)
49582* c:                                     Overall Options.    (line  164)
49583* client_name:                           Darwin Options.     (line  196)
49584* compatibility_version:                 Darwin Options.     (line  196)
49585* coverage:                              Debugging Options.  (line  412)
49586* current_version:                       Darwin Options.     (line  196)
49587* D:                                     Preprocessor Options.
49588                                                             (line   46)
49589* d:                                     Debugging Options.  (line  544)
49590* dA:                                    Debugging Options.  (line  754)
49591* da:                                    Debugging Options.  (line  751)
49592* dD <1>:                                Preprocessor Options.
49593                                                             (line  629)
49594* dD:                                    Debugging Options.  (line  758)
49595* dead_strip:                            Darwin Options.     (line  196)
49596* dependency-file:                       Darwin Options.     (line  196)
49597* dH:                                    Debugging Options.  (line  762)
49598* dI:                                    Preprocessor Options.
49599                                                             (line  638)
49600* dM:                                    Preprocessor Options.
49601                                                             (line  613)
49602* dN:                                    Preprocessor Options.
49603                                                             (line  635)
49604* dP:                                    Debugging Options.  (line  770)
49605* dp:                                    Debugging Options.  (line  765)
49606* dU:                                    Preprocessor Options.
49607                                                             (line  642)
49608* dumpmachine:                           Debugging Options.  (line 1380)
49609* dumpspecs:                             Debugging Options.  (line 1388)
49610* dumpversion:                           Debugging Options.  (line 1384)
49611* dx:                                    Debugging Options.  (line  774)
49612* dylib_file:                            Darwin Options.     (line  196)
49613* dylinker_install_name:                 Darwin Options.     (line  196)
49614* dynamic:                               Darwin Options.     (line  196)
49615* dynamiclib:                            Darwin Options.     (line  131)
49616* E <1>:                                 Link Options.       (line   20)
49617* E:                                     Overall Options.    (line  185)
49618* EB:                                    MIPS Options.       (line    7)
49619* EL:                                    MIPS Options.       (line   10)
49620* exported_symbols_list:                 Darwin Options.     (line  196)
49621* F:                                     Darwin Options.     (line   31)
49622* fabi-version:                          C++ Dialect Options.
49623                                                             (line   20)
49624* fada-spec-parent:                      Overall Options.    (line  369)
49625* faggressive-loop-optimizations:        Optimize Options.   (line  509)
49626* falign-functions:                      Optimize Options.   (line 1462)
49627* falign-jumps:                          Optimize Options.   (line 1511)
49628* falign-labels:                         Optimize Options.   (line 1480)
49629* falign-loops:                          Optimize Options.   (line 1498)
49630* fassociative-math:                     Optimize Options.   (line 1955)
49631* fasynchronous-unwind-tables:           Code Gen Options.   (line  146)
49632* fauto-inc-dec:                         Optimize Options.   (line  533)
49633* fbounds-check:                         Code Gen Options.   (line   15)
49634* fbranch-probabilities:                 Optimize Options.   (line 2082)
49635* fbranch-target-load-optimize:          Optimize Options.   (line 2190)
49636* fbranch-target-load-optimize2:         Optimize Options.   (line 2196)
49637* fbtr-bb-exclusive:                     Optimize Options.   (line 2200)
49638* fcall-saved:                           Code Gen Options.   (line  358)
49639* fcall-used:                            Code Gen Options.   (line  344)
49640* fcaller-saves:                         Optimize Options.   (line  829)
49641* fcheck-data-deps:                      Optimize Options.   (line 1094)
49642* fcheck-new:                            C++ Dialect Options.
49643                                                             (line   55)
49644* fcombine-stack-adjustments:            Optimize Options.   (line  841)
49645* fcommon:                               Variable Attributes.
49646                                                             (line  105)
49647* fcompare-debug:                        Debugging Options.  (line  200)
49648* fcompare-debug-second:                 Debugging Options.  (line  226)
49649* fcompare-elim:                         Optimize Options.   (line 1794)
49650* fcond-mismatch:                        C Dialect Options.  (line  315)
49651* fconserve-stack:                       Optimize Options.   (line  847)
49652* fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
49653                                                             (line   30)
49654* fconstexpr-depth:                      C++ Dialect Options.
49655                                                             (line   65)
49656* fcprop-registers:                      Optimize Options.   (line 1812)
49657* fcrossjumping:                         Optimize Options.   (line  526)
49658* fcse-follow-jumps:                     Optimize Options.   (line  445)
49659* fcse-skip-blocks:                      Optimize Options.   (line  454)
49660* fcx-fortran-rules:                     Optimize Options.   (line 2068)
49661* fcx-limited-range:                     Optimize Options.   (line 2056)
49662* fdata-sections:                        Optimize Options.   (line 2171)
49663* fdbg-cnt:                              Debugging Options.  (line  465)
49664* fdbg-cnt-list:                         Debugging Options.  (line  462)
49665* fdce:                                  Optimize Options.   (line  539)
49666* fdebug-cpp:                            Preprocessor Options.
49667                                                             (line  526)
49668* fdebug-prefix-map:                     Debugging Options.  (line  320)
49669* fdebug-types-section:                  Debugging Options.  (line   74)
49670* fdeduce-init-list:                     C++ Dialect Options.
49671                                                             (line   71)
49672* fdelayed-branch:                       Optimize Options.   (line  676)
49673* fdelete-dead-exceptions:               Code Gen Options.   (line  131)
49674* fdelete-null-pointer-checks:           Optimize Options.   (line  562)
49675* fdevirtualize:                         Optimize Options.   (line  580)
49676* fdiagnostics-show-caret:               Language Independent Options.
49677                                                             (line   40)
49678* fdiagnostics-show-location:            Language Independent Options.
49679                                                             (line   20)
49680* fdiagnostics-show-option:              Language Independent Options.
49681                                                             (line   34)
49682* fdirectives-only:                      Preprocessor Options.
49683                                                             (line  473)
49684* fdisable-:                             Debugging Options.  (line  475)
49685* fdollars-in-identifiers <1>:           Interoperation.     (line  141)
49686* fdollars-in-identifiers:               Preprocessor Options.
49687                                                             (line  495)
49688* fdse:                                  Optimize Options.   (line  543)
49689* fdump-ada-spec:                        Overall Options.    (line  363)
49690* fdump-class-hierarchy:                 Debugging Options.  (line  805)
49691* fdump-final-insns:                     Debugging Options.  (line  194)
49692* fdump-go-spec:                         Overall Options.    (line  373)
49693* fdump-ipa:                             Debugging Options.  (line  813)
49694* fdump-noaddr:                          Debugging Options.  (line  778)
49695* fdump-passes:                          Debugging Options.  (line  831)
49696* fdump-rtl-alignments:                  Debugging Options.  (line  565)
49697* fdump-rtl-all:                         Debugging Options.  (line  751)
49698* fdump-rtl-asmcons:                     Debugging Options.  (line  568)
49699* fdump-rtl-auto_inc_dec:                Debugging Options.  (line  572)
49700* fdump-rtl-barriers:                    Debugging Options.  (line  576)
49701* fdump-rtl-bbpart:                      Debugging Options.  (line  579)
49702* fdump-rtl-bbro:                        Debugging Options.  (line  582)
49703* fdump-rtl-btl2:                        Debugging Options.  (line  586)
49704* fdump-rtl-bypass:                      Debugging Options.  (line  590)
49705* fdump-rtl-ce1:                         Debugging Options.  (line  601)
49706* fdump-rtl-ce2:                         Debugging Options.  (line  601)
49707* fdump-rtl-ce3:                         Debugging Options.  (line  601)
49708* fdump-rtl-combine:                     Debugging Options.  (line  593)
49709* fdump-rtl-compgotos:                   Debugging Options.  (line  596)
49710* fdump-rtl-cprop_hardreg:               Debugging Options.  (line  605)
49711* fdump-rtl-csa:                         Debugging Options.  (line  608)
49712* fdump-rtl-cse1:                        Debugging Options.  (line  612)
49713* fdump-rtl-cse2:                        Debugging Options.  (line  612)
49714* fdump-rtl-dbr:                         Debugging Options.  (line  619)
49715* fdump-rtl-dce:                         Debugging Options.  (line  616)
49716* fdump-rtl-dce1:                        Debugging Options.  (line  623)
49717* fdump-rtl-dce2:                        Debugging Options.  (line  623)
49718* fdump-rtl-dfinish:                     Debugging Options.  (line  747)
49719* fdump-rtl-dfinit:                      Debugging Options.  (line  747)
49720* fdump-rtl-eh:                          Debugging Options.  (line  627)
49721* fdump-rtl-eh_ranges:                   Debugging Options.  (line  630)
49722* fdump-rtl-expand:                      Debugging Options.  (line  633)
49723* fdump-rtl-fwprop1:                     Debugging Options.  (line  637)
49724* fdump-rtl-fwprop2:                     Debugging Options.  (line  637)
49725* fdump-rtl-gcse1:                       Debugging Options.  (line  642)
49726* fdump-rtl-gcse2:                       Debugging Options.  (line  642)
49727* fdump-rtl-init-regs:                   Debugging Options.  (line  646)
49728* fdump-rtl-initvals:                    Debugging Options.  (line  649)
49729* fdump-rtl-into_cfglayout:              Debugging Options.  (line  652)
49730* fdump-rtl-ira:                         Debugging Options.  (line  655)
49731* fdump-rtl-jump:                        Debugging Options.  (line  658)
49732* fdump-rtl-loop2:                       Debugging Options.  (line  661)
49733* fdump-rtl-mach:                        Debugging Options.  (line  665)
49734* fdump-rtl-mode_sw:                     Debugging Options.  (line  669)
49735* fdump-rtl-outof_cfglayout:             Debugging Options.  (line  675)
49736* fdump-rtl-peephole2:                   Debugging Options.  (line  678)
49737* fdump-rtl-postreload:                  Debugging Options.  (line  681)
49738* fdump-rtl-pro_and_epilogue:            Debugging Options.  (line  684)
49739* fdump-rtl-regclass:                    Debugging Options.  (line  747)
49740* fdump-rtl-regmove:                     Debugging Options.  (line  687)
49741* fdump-rtl-rnreg:                       Debugging Options.  (line  672)
49742* fdump-rtl-sched1:                      Debugging Options.  (line  691)
49743* fdump-rtl-sched2:                      Debugging Options.  (line  691)
49744* fdump-rtl-see:                         Debugging Options.  (line  695)
49745* fdump-rtl-seqabstr:                    Debugging Options.  (line  698)
49746* fdump-rtl-shorten:                     Debugging Options.  (line  701)
49747* fdump-rtl-sibling:                     Debugging Options.  (line  704)
49748* fdump-rtl-sms:                         Debugging Options.  (line  717)
49749* fdump-rtl-split1:                      Debugging Options.  (line  711)
49750* fdump-rtl-split2:                      Debugging Options.  (line  711)
49751* fdump-rtl-split3:                      Debugging Options.  (line  711)
49752* fdump-rtl-split4:                      Debugging Options.  (line  711)
49753* fdump-rtl-split5:                      Debugging Options.  (line  711)
49754* fdump-rtl-stack:                       Debugging Options.  (line  721)
49755* fdump-rtl-subreg1:                     Debugging Options.  (line  727)
49756* fdump-rtl-subreg2:                     Debugging Options.  (line  727)
49757* fdump-rtl-subregs_of_mode_finish:      Debugging Options.  (line  747)
49758* fdump-rtl-subregs_of_mode_init:        Debugging Options.  (line  747)
49759* fdump-rtl-unshare:                     Debugging Options.  (line  731)
49760* fdump-rtl-vartrack:                    Debugging Options.  (line  734)
49761* fdump-rtl-vregs:                       Debugging Options.  (line  737)
49762* fdump-rtl-web:                         Debugging Options.  (line  740)
49763* fdump-statistics:                      Debugging Options.  (line  835)
49764* fdump-translation-unit:                Debugging Options.  (line  796)
49765* fdump-tree:                            Debugging Options.  (line  847)
49766* fdump-tree-alias:                      Debugging Options.  (line  986)
49767* fdump-tree-all:                        Debugging Options.  (line 1076)
49768* fdump-tree-ccp:                        Debugging Options.  (line  990)
49769* fdump-tree-cfg:                        Debugging Options.  (line  974)
49770* fdump-tree-ch:                         Debugging Options.  (line  978)
49771* fdump-tree-copyprop:                   Debugging Options.  (line 1006)
49772* fdump-tree-copyrename:                 Debugging Options.  (line 1052)
49773* fdump-tree-dce:                        Debugging Options.  (line 1014)
49774* fdump-tree-dom:                        Debugging Options.  (line 1032)
49775* fdump-tree-dse:                        Debugging Options.  (line 1037)
49776* fdump-tree-forwprop:                   Debugging Options.  (line 1047)
49777* fdump-tree-fre:                        Debugging Options.  (line 1002)
49778* fdump-tree-gimple:                     Debugging Options.  (line  969)
49779* fdump-tree-mudflap:                    Debugging Options.  (line 1018)
49780* fdump-tree-nrv:                        Debugging Options.  (line 1057)
49781* fdump-tree-optimized:                  Debugging Options.  (line  966)
49782* fdump-tree-original:                   Debugging Options.  (line  963)
49783* fdump-tree-phiopt:                     Debugging Options.  (line 1042)
49784* fdump-tree-pre:                        Debugging Options.  (line  998)
49785* fdump-tree-sink:                       Debugging Options.  (line 1028)
49786* fdump-tree-slp:                        Debugging Options.  (line 1067)
49787* fdump-tree-sra:                        Debugging Options.  (line 1023)
49788* fdump-tree-ssa:                        Debugging Options.  (line  982)
49789* fdump-tree-store_copyprop:             Debugging Options.  (line 1010)
49790* fdump-tree-storeccp:                   Debugging Options.  (line  994)
49791* fdump-tree-vect:                       Debugging Options.  (line 1062)
49792* fdump-tree-vrp:                        Debugging Options.  (line 1072)
49793* fdump-unnumbered:                      Debugging Options.  (line  784)
49794* fdump-unnumbered-links:                Debugging Options.  (line  790)
49795* fdwarf2-cfi-asm:                       Debugging Options.  (line  324)
49796* fearly-inlining:                       Optimize Options.   (line  276)
49797* feliminate-dwarf2-dups:                Debugging Options.  (line  239)
49798* feliminate-unused-debug-symbols:       Debugging Options.  (line   62)
49799* feliminate-unused-debug-types:         Debugging Options.  (line 1392)
49800* fenable-:                              Debugging Options.  (line  475)
49801* fexceptions:                           Code Gen Options.   (line  108)
49802* fexcess-precision:                     Optimize Options.   (line 1883)
49803* fexec-charset:                         Preprocessor Options.
49804                                                             (line  554)
49805* fexpensive-optimizations:              Optimize Options.   (line  587)
49806* fext-numeric-literals:                 C++ Dialect Options.
49807                                                             (line  547)
49808* fextended-identifiers:                 Preprocessor Options.
49809                                                             (line  498)
49810* fextern-tls-init:                      C++ Dialect Options.
49811                                                             (line  122)
49812* ffast-math:                            Optimize Options.   (line 1906)
49813* ffat-lto-objects:                      Optimize Options.   (line 1774)
49814* ffinite-math-only:                     Optimize Options.   (line 1980)
49815* ffix-and-continue:                     Darwin Options.     (line  104)
49816* ffixed:                                Code Gen Options.   (line  332)
49817* ffloat-store <1>:                      Disappointments.    (line   77)
49818* ffloat-store:                          Optimize Options.   (line 1869)
49819* ffor-scope:                            C++ Dialect Options.
49820                                                             (line  143)
49821* fforward-propagate:                    Optimize Options.   (line  185)
49822* ffp-contract:                          Optimize Options.   (line  194)
49823* ffreestanding <1>:                     Function Attributes.
49824                                                             (line  459)
49825* ffreestanding <2>:                     Warning Options.    (line  255)
49826* ffreestanding <3>:                     C Dialect Options.  (line  246)
49827* ffreestanding:                         Standards.          (line   93)
49828* ffriend-injection:                     C++ Dialect Options.
49829                                                             (line   92)
49830* ffunction-sections:                    Optimize Options.   (line 2171)
49831* fgcse:                                 Optimize Options.   (line  468)
49832* fgcse-after-reload:                    Optimize Options.   (line  504)
49833* fgcse-las:                             Optimize Options.   (line  497)
49834* fgcse-lm:                              Optimize Options.   (line  479)
49835* fgcse-sm:                              Optimize Options.   (line  488)
49836* fgnu-runtime:                          Objective-C and Objective-C++ Dialect Options.
49837                                                             (line   39)
49838* fgnu-tm:                               C Dialect Options.  (line  264)
49839* fgnu89-inline:                         C Dialect Options.  (line  147)
49840* fgraphite-identity:                    Optimize Options.   (line 1074)
49841* fhosted:                               C Dialect Options.  (line  239)
49842* fif-conversion:                        Optimize Options.   (line  547)
49843* fif-conversion2:                       Optimize Options.   (line  556)
49844* filelist:                              Darwin Options.     (line  196)
49845* findirect-data:                        Darwin Options.     (line  104)
49846* findirect-inlining:                    Optimize Options.   (line  249)
49847* finhibit-size-directive:               Code Gen Options.   (line  252)
49848* finline-functions:                     Optimize Options.   (line  257)
49849* finline-functions-called-once:         Optimize Options.   (line  268)
49850* finline-limit:                         Optimize Options.   (line  293)
49851* finline-small-functions:               Optimize Options.   (line  240)
49852* finput-charset:                        Preprocessor Options.
49853                                                             (line  567)
49854* finstrument-functions <1>:             Function Attributes.
49855                                                             (line  958)
49856* finstrument-functions:                 Code Gen Options.   (line  388)
49857* finstrument-functions-exclude-file-list: Code Gen Options. (line  424)
49858* finstrument-functions-exclude-function-list: Code Gen Options.
49859                                                             (line  444)
49860* fipa-cp:                               Optimize Options.   (line  913)
49861* fipa-cp-clone:                         Optimize Options.   (line  921)
49862* fipa-profile:                          Optimize Options.   (line  905)
49863* fipa-pta:                              Optimize Options.   (line  899)
49864* fipa-pure-const:                       Optimize Options.   (line  891)
49865* fipa-reference:                        Optimize Options.   (line  895)
49866* fipa-sra:                              Optimize Options.   (line  286)
49867* fira-hoist-pressure:                   Optimize Options.   (line  643)
49868* fira-loop-pressure:                    Optimize Options.   (line  650)
49869* fira-verbose:                          Optimize Options.   (line  670)
49870* fivopts:                               Optimize Options.   (line 1170)
49871* fkeep-inline-functions <1>:            Inline.             (line   51)
49872* fkeep-inline-functions:                Optimize Options.   (line  325)
49873* fkeep-static-consts:                   Optimize Options.   (line  332)
49874* flat_namespace:                        Darwin Options.     (line  196)
49875* flax-vector-conversions:               C Dialect Options.  (line  320)
49876* fleading-underscore:                   Code Gen Options.   (line  527)
49877* floop-block:                           Optimize Options.   (line 1045)
49878* floop-interchange:                     Optimize Options.   (line 1000)
49879* floop-nest-optimize:                   Optimize Options.   (line 1082)
49880* floop-parallelize-all:                 Optimize Options.   (line 1088)
49881* floop-strip-mine:                      Optimize Options.   (line 1024)
49882* flto:                                  Optimize Options.   (line 1565)
49883* flto-partition:                        Optimize Options.   (line 1729)
49884* fmax-errors:                           Warning Options.    (line   18)
49885* fmem-report:                           Debugging Options.  (line  348)
49886* fmem-report-wpa:                       Debugging Options.  (line  352)
49887* fmerge-all-constants:                  Optimize Options.   (line  351)
49888* fmerge-constants:                      Optimize Options.   (line  341)
49889* fmerge-debug-strings:                  Debugging Options.  (line  313)
49890* fmessage-length:                       Language Independent Options.
49891                                                             (line   14)
49892* fmodulo-sched:                         Optimize Options.   (line  362)
49893* fmodulo-sched-allow-regmoves:          Optimize Options.   (line  367)
49894* fmove-loop-invariants:                 Optimize Options.   (line 2161)
49895* fms-extensions <1>:                    Unnamed Fields.     (line   36)
49896* fms-extensions <2>:                    C++ Dialect Options.
49897                                                             (line  177)
49898* fms-extensions:                        C Dialect Options.  (line  279)
49899* fmudflap:                              Optimize Options.   (line  407)
49900* fmudflapir:                            Optimize Options.   (line  407)
49901* fmudflapth:                            Optimize Options.   (line  407)
49902* fnext-runtime:                         Objective-C and Objective-C++ Dialect Options.
49903                                                             (line   43)
49904* fno-access-control:                    C++ Dialect Options.
49905                                                             (line   51)
49906* fno-asm:                               C Dialect Options.  (line  191)
49907* fno-branch-count-reg:                  Optimize Options.   (line  374)
49908* fno-builtin <1>:                       Other Builtins.     (line   14)
49909* fno-builtin <2>:                       Function Attributes.
49910                                                             (line  459)
49911* fno-builtin <3>:                       Warning Options.    (line  255)
49912* fno-builtin:                           C Dialect Options.  (line  205)
49913* fno-canonical-system-headers:          Preprocessor Options.
49914                                                             (line  503)
49915* fno-common <1>:                        Variable Attributes.
49916                                                             (line  105)
49917* fno-common:                            Code Gen Options.   (line  229)
49918* fno-compare-debug:                     Debugging Options.  (line  200)
49919* fno-debug-types-section:               Debugging Options.  (line   74)
49920* fno-default-inline <1>:                Inline.             (line   71)
49921* fno-default-inline <2>:                Optimize Options.   (line  170)
49922* fno-default-inline:                    C++ Dialect Options.
49923                                                             (line  356)
49924* fno-defer-pop:                         Optimize Options.   (line  177)
49925* fno-diagnostics-show-caret:            Language Independent Options.
49926                                                             (line   40)
49927* fno-diagnostics-show-option:           Language Independent Options.
49928                                                             (line   34)
49929* fno-dwarf2-cfi-asm:                    Debugging Options.  (line  324)
49930* fno-elide-constructors:                C++ Dialect Options.
49931                                                             (line  105)
49932* fno-eliminate-unused-debug-types:      Debugging Options.  (line 1392)
49933* fno-enforce-eh-specs:                  C++ Dialect Options.
49934                                                             (line  111)
49935* fno-ext-numeric-literals:              C++ Dialect Options.
49936                                                             (line  547)
49937* fno-extern-tls-init:                   C++ Dialect Options.
49938                                                             (line  122)
49939* fno-for-scope:                         C++ Dialect Options.
49940                                                             (line  143)
49941* fno-function-cse:                      Optimize Options.   (line  384)
49942* fno-gnu-keywords:                      C++ Dialect Options.
49943                                                             (line  155)
49944* fno-gnu-unique:                        Code Gen Options.   (line  152)
49945* fno-guess-branch-probability:          Optimize Options.   (line 1334)
49946* fno-ident:                             Code Gen Options.   (line  249)
49947* fno-implement-inlines <1>:             C++ Interface.      (line   75)
49948* fno-implement-inlines:                 C++ Dialect Options.
49949                                                             (line  172)
49950* fno-implicit-inline-templates:         C++ Dialect Options.
49951                                                             (line  166)
49952* fno-implicit-templates <1>:            Template Instantiation.
49953                                                             (line   78)
49954* fno-implicit-templates:                C++ Dialect Options.
49955                                                             (line  160)
49956* fno-inline:                            Optimize Options.   (line  232)
49957* fno-ira-share-save-slots:              Optimize Options.   (line  658)
49958* fno-ira-share-spill-slots:             Optimize Options.   (line  664)
49959* fno-jump-tables:                       Code Gen Options.   (line  324)
49960* fno-math-errno:                        Optimize Options.   (line 1920)
49961* fno-merge-debug-strings:               Debugging Options.  (line  313)
49962* fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
49963                                                             (line   49)
49964* fno-nonansi-builtins:                  C++ Dialect Options.
49965                                                             (line  182)
49966* fno-operator-names:                    C++ Dialect Options.
49967                                                             (line  198)
49968* fno-optional-diags:                    C++ Dialect Options.
49969                                                             (line  202)
49970* fno-peephole:                          Optimize Options.   (line 1325)
49971* fno-peephole2:                         Optimize Options.   (line 1325)
49972* fno-pretty-templates:                  C++ Dialect Options.
49973                                                             (line  212)
49974* fno-rtti:                              C++ Dialect Options.
49975                                                             (line  229)
49976* fno-sched-interblock:                  Optimize Options.   (line  702)
49977* fno-sched-spec:                        Optimize Options.   (line  707)
49978* fno-set-stack-executable:              i386 and x86-64 Windows Options.
49979                                                             (line   46)
49980* fno-show-column:                       Preprocessor Options.
49981                                                             (line  592)
49982* fno-signed-bitfields:                  C Dialect Options.  (line  353)
49983* fno-signed-zeros:                      Optimize Options.   (line 1992)
49984* fno-stack-limit:                       Code Gen Options.   (line  495)
49985* fno-threadsafe-statics:                C++ Dialect Options.
49986                                                             (line  266)
49987* fno-toplevel-reorder:                  Optimize Options.   (line 1531)
49988* fno-trapping-math:                     Optimize Options.   (line 2002)
49989* fno-unsigned-bitfields:                C Dialect Options.  (line  353)
49990* fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
49991                                                             (line  279)
49992* fno-var-tracking-assignments:          Debugging Options.  (line 1300)
49993* fno-var-tracking-assignments-toggle:   Debugging Options.  (line 1309)
49994* fno-weak:                              C++ Dialect Options.
49995                                                             (line  341)
49996* fno-working-directory:                 Preprocessor Options.
49997                                                             (line  577)
49998* fno-writable-relocated-rdata:          i386 and x86-64 Windows Options.
49999                                                             (line   53)
50000* fno-zero-initialized-in-bss:           Optimize Options.   (line  395)
50001* fnon-call-exceptions:                  Code Gen Options.   (line  122)
50002* fnothrow-opt:                          C++ Dialect Options.
50003                                                             (line  187)
50004* fobjc-abi-version:                     Objective-C and Objective-C++ Dialect Options.
50005                                                             (line   56)
50006* fobjc-call-cxx-cdtors:                 Objective-C and Objective-C++ Dialect Options.
50007                                                             (line   67)
50008* fobjc-direct-dispatch:                 Objective-C and Objective-C++ Dialect Options.
50009                                                             (line   92)
50010* fobjc-exceptions:                      Objective-C and Objective-C++ Dialect Options.
50011                                                             (line   96)
50012* fobjc-gc:                              Objective-C and Objective-C++ Dialect Options.
50013                                                             (line  105)
50014* fobjc-nilcheck:                        Objective-C and Objective-C++ Dialect Options.
50015                                                             (line  111)
50016* fobjc-std:                             Objective-C and Objective-C++ Dialect Options.
50017                                                             (line  120)
50018* fomit-frame-pointer:                   Optimize Options.   (line  205)
50019* fopenmp:                               C Dialect Options.  (line  256)
50020* fopt-info:                             Debugging Options.  (line 1082)
50021* foptimize-register-move:               Optimize Options.   (line  602)
50022* foptimize-sibling-calls:               Optimize Options.   (line  227)
50023* force_cpusubtype_ALL:                  Darwin Options.     (line  135)
50024* force_flat_namespace:                  Darwin Options.     (line  196)
50025* fpack-struct:                          Code Gen Options.   (line  375)
50026* fpartial-inlining:                     Optimize Options.   (line 1300)
50027* fpcc-struct-return <1>:                Incompatibilities.  (line  170)
50028* fpcc-struct-return:                    Code Gen Options.   (line  165)
50029* fpch-deps:                             Preprocessor Options.
50030                                                             (line  294)
50031* fpch-preprocess:                       Preprocessor Options.
50032                                                             (line  302)
50033* fpeel-loops:                           Optimize Options.   (line 2153)
50034* fpermissive:                           C++ Dialect Options.
50035                                                             (line  207)
50036* fPIC:                                  Code Gen Options.   (line  301)
50037* fpic:                                  Code Gen Options.   (line  280)
50038* fPIE:                                  Code Gen Options.   (line  314)
50039* fpie:                                  Code Gen Options.   (line  314)
50040* fplan9-extensions:                     Unnamed Fields.     (line   44)
50041* fpost-ipa-mem-report:                  Debugging Options.  (line  358)
50042* fpre-ipa-mem-report:                   Debugging Options.  (line  356)
50043* fpredictive-commoning:                 Optimize Options.   (line 1307)
50044* fprefetch-loop-arrays:                 Optimize Options.   (line 1314)
50045* fpreprocessed:                         Preprocessor Options.
50046                                                             (line  507)
50047* fprofile-arcs <1>:                     Other Builtins.     (line  257)
50048* fprofile-arcs:                         Debugging Options.  (line  397)
50049* fprofile-correction:                   Optimize Options.   (line 1819)
50050* fprofile-dir:                          Optimize Options.   (line 1826)
50051* fprofile-generate:                     Optimize Options.   (line 1836)
50052* fprofile-report:                       Debugging Options.  (line  362)
50053* fprofile-use:                          Optimize Options.   (line 1849)
50054* fprofile-values:                       Optimize Options.   (line 2101)
50055* fpu:                                   RX Options.         (line   17)
50056* frandom-seed:                          Debugging Options.  (line 1194)
50057* freciprocal-math:                      Optimize Options.   (line 1971)
50058* frecord-gcc-switches:                  Code Gen Options.   (line  268)
50059* free:                                  Optimize Options.   (line  593)
50060* freg-struct-return:                    Code Gen Options.   (line  183)
50061* fregmove:                              Optimize Options.   (line  602)
50062* frename-registers:                     Optimize Options.   (line 2120)
50063* freorder-blocks:                       Optimize Options.   (line 1351)
50064* freorder-blocks-and-partition:         Optimize Options.   (line 1357)
50065* freorder-functions:                    Optimize Options.   (line 1368)
50066* freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
50067                                                             (line  131)
50068* frepo <1>:                             Template Instantiation.
50069                                                             (line   54)
50070* frepo:                                 C++ Dialect Options.
50071                                                             (line  224)
50072* frerun-cse-after-loop:                 Optimize Options.   (line  462)
50073* freschedule-modulo-scheduled-loops:    Optimize Options.   (line  801)
50074* frounding-math:                        Optimize Options.   (line 2017)
50075* fsched-critical-path-heuristic:        Optimize Options.   (line  767)
50076* fsched-dep-count-heuristic:            Optimize Options.   (line  794)
50077* fsched-group-heuristic:                Optimize Options.   (line  761)
50078* fsched-last-insn-heuristic:            Optimize Options.   (line  787)
50079* fsched-pressure:                       Optimize Options.   (line  712)
50080* fsched-rank-heuristic:                 Optimize Options.   (line  780)
50081* fsched-spec-insn-heuristic:            Optimize Options.   (line  773)
50082* fsched-spec-load:                      Optimize Options.   (line  721)
50083* fsched-spec-load-dangerous:            Optimize Options.   (line  726)
50084* fsched-stalled-insns:                  Optimize Options.   (line  732)
50085* fsched-stalled-insns-dep:              Optimize Options.   (line  742)
50086* fsched-verbose:                        Debugging Options.  (line 1204)
50087* fsched2-use-superblocks:               Optimize Options.   (line  751)
50088* fschedule-insns:                       Optimize Options.   (line  683)
50089* fschedule-insns2:                      Optimize Options.   (line  693)
50090* fsection-anchors:                      Optimize Options.   (line 2216)
50091* fsel-sched-pipelining:                 Optimize Options.   (line  814)
50092* fsel-sched-pipelining-outer-loops:     Optimize Options.   (line  819)
50093* fselective-scheduling:                 Optimize Options.   (line  806)
50094* fselective-scheduling2:                Optimize Options.   (line  810)
50095* fshort-double:                         Code Gen Options.   (line  211)
50096* fshort-enums <1>:                      Non-bugs.           (line   42)
50097* fshort-enums <2>:                      Type Attributes.    (line  113)
50098* fshort-enums <3>:                      Structures unions enumerations and bit-fields implementation.
50099                                                             (line   43)
50100* fshort-enums:                          Code Gen Options.   (line  201)
50101* fshort-wchar:                          Code Gen Options.   (line  219)
50102* fshrink-wrap:                          Optimize Options.   (line  824)
50103* fsignaling-nans:                       Optimize Options.   (line 2037)
50104* fsigned-bitfields <1>:                 Non-bugs.           (line   57)
50105* fsigned-bitfields:                     C Dialect Options.  (line  353)
50106* fsigned-char <1>:                      Characters implementation.
50107                                                             (line   31)
50108* fsigned-char:                          C Dialect Options.  (line  343)
50109* fsingle-precision-constant:            Optimize Options.   (line 2052)
50110* fsplit-ivs-in-unroller:                Optimize Options.   (line 1281)
50111* fsplit-stack <1>:                      Function Attributes.
50112                                                             (line  963)
50113* fsplit-stack:                          Code Gen Options.   (line  509)
50114* fsplit-wide-types:                     Optimize Options.   (line  437)
50115* fstack-check:                          Code Gen Options.   (line  456)
50116* fstack-limit-register:                 Code Gen Options.   (line  495)
50117* fstack-limit-symbol:                   Code Gen Options.   (line  495)
50118* fstack-protector:                      Optimize Options.   (line 2204)
50119* fstack-protector-all:                  Optimize Options.   (line 2213)
50120* fstack-usage:                          Debugging Options.  (line  366)
50121* fstack_reuse:                          Code Gen Options.   (line   21)
50122* fstats:                                C++ Dialect Options.
50123                                                             (line  239)
50124* fstrict-aliasing:                      Optimize Options.   (line 1381)
50125* fstrict-enums:                         C++ Dialect Options.
50126                                                             (line  244)
50127* fstrict-overflow:                      Optimize Options.   (line 1427)
50128* fstrict-volatile-bitfields:            Code Gen Options.   (line  612)
50129* fsync-libcalls:                        Code Gen Options.   (line  641)
50130* fsyntax-only:                          Warning Options.    (line   14)
50131* ftabstop:                              Preprocessor Options.
50132                                                             (line  520)
50133* ftemplate-backtrace-limit:             C++ Dialect Options.
50134                                                             (line  253)
50135* ftemplate-depth:                       C++ Dialect Options.
50136                                                             (line  257)
50137* ftest-coverage:                        Debugging Options.  (line  453)
50138* fthread-jumps:                         Optimize Options.   (line  428)
50139* ftime-report:                          Debugging Options.  (line  344)
50140* ftls-model:                            Code Gen Options.   (line  538)
50141* ftracer:                               Optimize Options.   (line 1264)
50142* ftrack-macro-expansion:                Preprocessor Options.
50143                                                             (line  536)
50144* ftrapv:                                Code Gen Options.   (line   96)
50145* ftree-bit-ccp:                         Optimize Options.   (line  935)
50146* ftree-builtin-call-dce:                Optimize Options.   (line  963)
50147* ftree-ccp:                             Optimize Options.   (line  941)
50148* ftree-ch:                              Optimize Options.   (line  983)
50149* ftree-copy-prop:                       Optimize Options.   (line  886)
50150* ftree-copyrename:                      Optimize Options.   (line 1194)
50151* ftree-dce:                             Optimize Options.   (line  959)
50152* ftree-dominator-opts:                  Optimize Options.   (line  969)
50153* ftree-dse:                             Optimize Options.   (line  976)
50154* ftree-forwprop:                        Optimize Options.   (line  865)
50155* ftree-fre:                             Optimize Options.   (line  869)
50156* ftree-loop-im:                         Optimize Options.   (line 1155)
50157* ftree-loop-ivcanon:                    Optimize Options.   (line 1164)
50158* ftree-loop-linear:                     Optimize Options.   (line  994)
50159* ftree-loop-optimize:                   Optimize Options.   (line  990)
50160* ftree-parallelize-loops:               Optimize Options.   (line 1175)
50161* ftree-partial-pre:                     Optimize Options.   (line  861)
50162* ftree-phiprop:                         Optimize Options.   (line  876)
50163* ftree-pre:                             Optimize Options.   (line  857)
50164* ftree-pta:                             Optimize Options.   (line 1184)
50165* ftree-reassoc:                         Optimize Options.   (line  853)
50166* ftree-sink:                            Optimize Options.   (line  931)
50167* ftree-slp-vectorize:                   Optimize Options.   (line 1238)
50168* ftree-slsr:                            Optimize Options.   (line 1228)
50169* ftree-sra:                             Optimize Options.   (line 1188)
50170* ftree-ter:                             Optimize Options.   (line 1220)
50171* ftree-vect-loop-version:               Optimize Options.   (line 1242)
50172* ftree-vectorize:                       Optimize Options.   (line 1234)
50173* ftree-vectorizer-verbose:              Debugging Options.  (line 1177)
50174* ftree-vrp:                             Optimize Options.   (line 1255)
50175* funit-at-a-time:                       Optimize Options.   (line 1524)
50176* funroll-all-loops:                     Optimize Options.   (line 1275)
50177* funroll-loops:                         Optimize Options.   (line 1269)
50178* funsafe-loop-optimizations:            Optimize Options.   (line  518)
50179* funsafe-math-optimizations:            Optimize Options.   (line 1938)
50180* funsigned-bitfields <1>:               Non-bugs.           (line   57)
50181* funsigned-bitfields <2>:               Structures unions enumerations and bit-fields implementation.
50182                                                             (line   17)
50183* funsigned-bitfields:                   C Dialect Options.  (line  353)
50184* funsigned-char <1>:                    Characters implementation.
50185                                                             (line   31)
50186* funsigned-char:                        C Dialect Options.  (line  325)
50187* funswitch-loops:                       Optimize Options.   (line 2165)
50188* funwind-tables:                        Code Gen Options.   (line  139)
50189* fuse-cxa-atexit:                       C++ Dialect Options.
50190                                                             (line  272)
50191* fvar-tracking:                         Debugging Options.  (line 1290)
50192* fvar-tracking-assignments:             Debugging Options.  (line 1300)
50193* fvar-tracking-assignments-toggle:      Debugging Options.  (line 1309)
50194* fvariable-expansion-in-unroller:       Optimize Options.   (line 1295)
50195* fvect-cost-model:                      Optimize Options.   (line 1251)
50196* fverbose-asm:                          Code Gen Options.   (line  259)
50197* fvisibility:                           Code Gen Options.   (line  546)
50198* fvisibility-inlines-hidden:            C++ Dialect Options.
50199                                                             (line  284)
50200* fvisibility-ms-compat:                 C++ Dialect Options.
50201                                                             (line  312)
50202* fvpt:                                  Optimize Options.   (line 2110)
50203* fweb:                                  Optimize Options.   (line 1543)
50204* fwhole-program:                        Optimize Options.   (line 1554)
50205* fwide-exec-charset:                    Preprocessor Options.
50206                                                             (line  559)
50207* fworking-directory:                    Preprocessor Options.
50208                                                             (line  577)
50209* fwrapv:                                Code Gen Options.   (line  100)
50210* fzero-link:                            Objective-C and Objective-C++ Dialect Options.
50211                                                             (line  141)
50212* G <1>:                                 System V Options.   (line   10)
50213* G <2>:                                 RS/6000 and PowerPC Options.
50214                                                             (line  745)
50215* G <3>:                                 MIPS Options.       (line  330)
50216* G:                                     M32R/D Options.     (line   57)
50217* g:                                     Debugging Options.  (line   10)
50218* gcoff:                                 Debugging Options.  (line   89)
50219* gdwarf-VERSION:                        Debugging Options.  (line  107)
50220* gen-decls:                             Objective-C and Objective-C++ Dialect Options.
50221                                                             (line  153)
50222* gfull:                                 Darwin Options.     (line   69)
50223* ggdb:                                  Debugging Options.  (line   45)
50224* gno-record-gcc-switches:               Debugging Options.  (line  127)
50225* gno-strict-dwarf:                      Debugging Options.  (line  137)
50226* gpubnames:                             Debugging Options.  (line   51)
50227* grecord-gcc-switches:                  Debugging Options.  (line  118)
50228* gsplit-dwarf:                          Debugging Options.  (line   38)
50229* gstabs:                                Debugging Options.  (line   54)
50230* gstabs+:                               Debugging Options.  (line   83)
50231* gstrict-dwarf:                         Debugging Options.  (line  131)
50232* gtoggle:                               Debugging Options.  (line  174)
50233* gused:                                 Darwin Options.     (line   64)
50234* gvms:                                  Debugging Options.  (line  141)
50235* gxcoff:                                Debugging Options.  (line   94)
50236* gxcoff+:                               Debugging Options.  (line   99)
50237* H:                                     Preprocessor Options.
50238                                                             (line  710)
50239* headerpad_max_install_names:           Darwin Options.     (line  196)
50240* help <1>:                              Preprocessor Options.
50241                                                             (line  702)
50242* help:                                  Overall Options.    (line  221)
50243* hoist-adjacent-loads:                  Optimize Options.   (line  880)
50244* I <1>:                                 Directory Options.  (line   10)
50245* I:                                     Preprocessor Options.
50246                                                             (line   77)
50247* I- <1>:                                Directory Options.  (line  119)
50248* I-:                                    Preprocessor Options.
50249                                                             (line  387)
50250* idirafter:                             Preprocessor Options.
50251                                                             (line  429)
50252* iframework:                            Darwin Options.     (line   57)
50253* imacros:                               Preprocessor Options.
50254                                                             (line  420)
50255* image_base:                            Darwin Options.     (line  196)
50256* imultilib:                             Preprocessor Options.
50257                                                             (line  454)
50258* include:                               Preprocessor Options.
50259                                                             (line  409)
50260* init:                                  Darwin Options.     (line  196)
50261* install_name:                          Darwin Options.     (line  196)
50262* iprefix:                               Preprocessor Options.
50263                                                             (line  436)
50264* iquote <1>:                            Directory Options.  (line   36)
50265* iquote:                                Preprocessor Options.
50266                                                             (line  466)
50267* isysroot:                              Preprocessor Options.
50268                                                             (line  448)
50269* isystem:                               Preprocessor Options.
50270                                                             (line  458)
50271* iwithprefix:                           Preprocessor Options.
50272                                                             (line  442)
50273* iwithprefixbefore:                     Preprocessor Options.
50274                                                             (line  442)
50275* keep_private_externs:                  Darwin Options.     (line  196)
50276* L:                                     Directory Options.  (line   42)
50277* l:                                     Link Options.       (line   26)
50278* lobjc:                                 Link Options.       (line   53)
50279* m:                                     RS/6000 and PowerPC Options.
50280                                                             (line  586)
50281* M:                                     Preprocessor Options.
50282                                                             (line  185)
50283* m1:                                    SH Options.         (line    9)
50284* m10:                                   PDP-11 Options.     (line   29)
50285* m128bit-long-double:                   i386 and x86-64 Options.
50286                                                             (line  342)
50287* m16-bit:                               CRIS Options.       (line   64)
50288* m1reg-:                                Adapteva Epiphany Options.
50289                                                             (line  132)
50290* m2:                                    SH Options.         (line   12)
50291* m210:                                  MCore Options.      (line   43)
50292* m2a:                                   SH Options.         (line   30)
50293* m2a-nofpu:                             SH Options.         (line   18)
50294* m2a-single:                            SH Options.         (line   26)
50295* m2a-single-only:                       SH Options.         (line   22)
50296* m3:                                    SH Options.         (line   34)
50297* m31:                                   S/390 and zSeries Options.
50298                                                             (line   87)
50299* m32 <1>:                               TILEPro Options.    (line   13)
50300* m32 <2>:                               TILE-Gx Options.    (line   23)
50301* m32 <3>:                               SPARC Options.      (line  257)
50302* m32 <4>:                               RS/6000 and PowerPC Options.
50303                                                             (line  278)
50304* m32:                                   i386 and x86-64 Options.
50305                                                             (line  841)
50306* m32-bit:                               CRIS Options.       (line   64)
50307* m32bit-doubles:                        RX Options.         (line   10)
50308* m32r:                                  M32R/D Options.     (line   15)
50309* m32r2:                                 M32R/D Options.     (line    9)
50310* m32rx:                                 M32R/D Options.     (line   12)
50311* m340:                                  MCore Options.      (line   43)
50312* m3dnow:                                i386 and x86-64 Options.
50313                                                             (line  571)
50314* m3e:                                   SH Options.         (line   37)
50315* m4:                                    SH Options.         (line   51)
50316* m4-100:                                SH Options.         (line   54)
50317* m4-100-nofpu:                          SH Options.         (line   57)
50318* m4-100-single:                         SH Options.         (line   61)
50319* m4-100-single-only:                    SH Options.         (line   65)
50320* m4-200:                                SH Options.         (line   69)
50321* m4-200-nofpu:                          SH Options.         (line   72)
50322* m4-200-single:                         SH Options.         (line   76)
50323* m4-200-single-only:                    SH Options.         (line   80)
50324* m4-300:                                SH Options.         (line   84)
50325* m4-300-nofpu:                          SH Options.         (line   87)
50326* m4-300-single:                         SH Options.         (line   91)
50327* m4-300-single-only:                    SH Options.         (line   95)
50328* m4-340:                                SH Options.         (line   99)
50329* m4-500:                                SH Options.         (line  102)
50330* m4-nofpu:                              SH Options.         (line   40)
50331* m4-single:                             SH Options.         (line   47)
50332* m4-single-only:                        SH Options.         (line   43)
50333* m40:                                   PDP-11 Options.     (line   23)
50334* m45:                                   PDP-11 Options.     (line   26)
50335* m4a:                                   SH Options.         (line  118)
50336* m4a-nofpu:                             SH Options.         (line  106)
50337* m4a-single:                            SH Options.         (line  114)
50338* m4a-single-only:                       SH Options.         (line  110)
50339* m4al:                                  SH Options.         (line  121)
50340* m4byte-functions:                      MCore Options.      (line   27)
50341* m5-32media:                            SH Options.         (line  126)
50342* m5-32media-nofpu:                      SH Options.         (line  129)
50343* m5-64media:                            SH Options.         (line  133)
50344* m5-64media-nofpu:                      SH Options.         (line  136)
50345* m5-compact:                            SH Options.         (line  140)
50346* m5-compact-nofpu:                      SH Options.         (line  143)
50347* m5200:                                 M680x0 Options.     (line  147)
50348* m5206e:                                M680x0 Options.     (line  156)
50349* m528x:                                 M680x0 Options.     (line  160)
50350* m5307:                                 M680x0 Options.     (line  164)
50351* m5407:                                 M680x0 Options.     (line  168)
50352* m64 <1>:                               TILE-Gx Options.    (line   23)
50353* m64 <2>:                               SPARC Options.      (line  257)
50354* m64 <3>:                               S/390 and zSeries Options.
50355                                                             (line   87)
50356* m64 <4>:                               RS/6000 and PowerPC Options.
50357                                                             (line  278)
50358* m64:                                   i386 and x86-64 Options.
50359                                                             (line  841)
50360* m64bit-doubles:                        RX Options.         (line   10)
50361* m68000:                                M680x0 Options.     (line   95)
50362* m68010:                                M680x0 Options.     (line  103)
50363* m68020:                                M680x0 Options.     (line  109)
50364* m68020-40:                             M680x0 Options.     (line  178)
50365* m68020-60:                             M680x0 Options.     (line  187)
50366* m68030:                                M680x0 Options.     (line  114)
50367* m68040:                                M680x0 Options.     (line  119)
50368* m68060:                                M680x0 Options.     (line  128)
50369* m68881:                                M680x0 Options.     (line  197)
50370* m8-bit:                                CRIS Options.       (line   64)
50371* m8byte-align:                          V850 Options.       (line  170)
50372* m96bit-long-double:                    i386 and x86-64 Options.
50373                                                             (line  342)
50374* mabi <1>:                              RS/6000 and PowerPC Options.
50375                                                             (line  613)
50376* mabi <2>:                              i386 and x86-64 Options.
50377                                                             (line  721)
50378* mabi:                                  ARM Options.        (line   10)
50379* mabi=32:                               MIPS Options.       (line  131)
50380* mabi=64:                               MIPS Options.       (line  131)
50381* mabi=eabi:                             MIPS Options.       (line  131)
50382* mabi=elfv1:                            RS/6000 and PowerPC Options.
50383                                                             (line  634)
50384* mabi=elfv2:                            RS/6000 and PowerPC Options.
50385                                                             (line  640)
50386* mabi=gnu:                              MMIX Options.       (line   20)
50387* mabi=ibmlongdouble:                    RS/6000 and PowerPC Options.
50388                                                             (line  626)
50389* mabi=ieeelongdouble:                   RS/6000 and PowerPC Options.
50390                                                             (line  630)
50391* mabi=mmixware:                         MMIX Options.       (line   20)
50392* mabi=n32:                              MIPS Options.       (line  131)
50393* mabi=no-spe:                           RS/6000 and PowerPC Options.
50394                                                             (line  623)
50395* mabi=o64:                              MIPS Options.       (line  131)
50396* mabi=spe:                              RS/6000 and PowerPC Options.
50397                                                             (line  618)
50398* mabicalls:                             MIPS Options.       (line  155)
50399* mabort-on-noreturn:                    ARM Options.        (line  184)
50400* mabsdiff:                              MeP Options.        (line    7)
50401* mabshi:                                PDP-11 Options.     (line   55)
50402* mac0:                                  PDP-11 Options.     (line   16)
50403* macc-4:                                FRV Options.        (line  113)
50404* macc-8:                                FRV Options.        (line  116)
50405* maccumulate-args:                      AVR Options.        (line  135)
50406* maccumulate-outgoing-args <1>:         SH Options.         (line  401)
50407* maccumulate-outgoing-args:             i386 and x86-64 Options.
50408                                                             (line  744)
50409* maddress-mode=long:                    i386 and x86-64 Options.
50410                                                             (line  884)
50411* maddress-mode=short:                   i386 and x86-64 Options.
50412                                                             (line  889)
50413* maddress-space-conversion:             SPU Options.        (line   63)
50414* mads:                                  RS/6000 and PowerPC Options.
50415                                                             (line  668)
50416* maix-struct-return:                    RS/6000 and PowerPC Options.
50417                                                             (line  606)
50418* maix32:                                RS/6000 and PowerPC Options.
50419                                                             (line  316)
50420* maix64:                                RS/6000 and PowerPC Options.
50421                                                             (line  316)
50422* malign-300:                            H8/300 Options.     (line   41)
50423* malign-double:                         i386 and x86-64 Options.
50424                                                             (line  326)
50425* malign-int:                            M680x0 Options.     (line  267)
50426* malign-labels:                         FRV Options.        (line  104)
50427* malign-loops:                          M32R/D Options.     (line   73)
50428* malign-natural:                        RS/6000 and PowerPC Options.
50429                                                             (line  355)
50430* malign-power:                          RS/6000 and PowerPC Options.
50431                                                             (line  355)
50432* mall-opts:                             MeP Options.        (line   11)
50433* malloc-cc:                             FRV Options.        (line   25)
50434* maltivec:                              RS/6000 and PowerPC Options.
50435                                                             (line  136)
50436* maltivec=be:                           RS/6000 and PowerPC Options.
50437                                                             (line  152)
50438* maltivec=le:                           RS/6000 and PowerPC Options.
50439                                                             (line  162)
50440* mam33:                                 MN10300 Options.    (line   17)
50441* mam33-2:                               MN10300 Options.    (line   24)
50442* mam34:                                 MN10300 Options.    (line   27)
50443* mandroid:                              GNU/Linux Options.  (line   21)
50444* mapcs:                                 ARM Options.        (line   22)
50445* mapcs-frame:                           ARM Options.        (line   14)
50446* mapp-regs <1>:                         V850 Options.       (line  181)
50447* mapp-regs:                             SPARC Options.      (line   10)
50448* march <1>:                             S/390 and zSeries Options.
50449                                                             (line  116)
50450* march <2>:                             MIPS Options.       (line   14)
50451* march <3>:                             M680x0 Options.     (line   12)
50452* march <4>:                             i386 and x86-64 Options.
50453                                                             (line   10)
50454* march <5>:                             HPPA Options.       (line    9)
50455* march <6>:                             CRIS Options.       (line   10)
50456* march <7>:                             C6X Options.        (line    7)
50457* march <8>:                             ARM Options.        (line   75)
50458* march:                                 AArch64 Options.    (line   62)
50459* marm:                                  ARM Options.        (line  248)
50460* mas100-syntax:                         RX Options.         (line   76)
50461* masm=DIALECT:                          i386 and x86-64 Options.
50462                                                             (line  281)
50463* matomic-model=MODEL:                   SH Options.         (line  214)
50464* matomic-updates:                       SPU Options.        (line   78)
50465* mauto-pic:                             IA-64 Options.      (line   50)
50466* maverage:                              MeP Options.        (line   16)
50467* mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
50468                                                             (line  425)
50469* max-vect-align:                        Adapteva Epiphany Options.
50470                                                             (line  120)
50471* mb:                                    SH Options.         (line  147)
50472* mbackchain:                            S/390 and zSeries Options.
50473                                                             (line   35)
50474* mbarrel-shift-enabled:                 LM32 Options.       (line    9)
50475* mbase-addresses:                       MMIX Options.       (line   54)
50476* mbased=:                               MeP Options.        (line   20)
50477* mbcopy:                                PDP-11 Options.     (line   36)
50478* mbcopy-builtin:                        PDP-11 Options.     (line   32)
50479* mbig:                                  RS/6000 and PowerPC Options.
50480                                                             (line  505)
50481* mbig-endian <1>:                       RS/6000 and PowerPC Options.
50482                                                             (line  505)
50483* mbig-endian <2>:                       MicroBlaze Options. (line   57)
50484* mbig-endian <3>:                       MCore Options.      (line   39)
50485* mbig-endian <4>:                       IA-64 Options.      (line    9)
50486* mbig-endian <5>:                       C6X Options.        (line   13)
50487* mbig-endian <6>:                       ARM Options.        (line   62)
50488* mbig-endian:                           AArch64 Options.    (line    9)
50489* mbig-endian-data:                      RX Options.         (line   42)
50490* mbig-switch <1>:                       V850 Options.       (line  176)
50491* mbig-switch:                           HPPA Options.       (line   23)
50492* mbigtable:                             SH Options.         (line  162)
50493* mbionic:                               GNU/Linux Options.  (line   17)
50494* mbit-align:                            RS/6000 and PowerPC Options.
50495                                                             (line  457)
50496* mbit-ops:                              CR16 Options.       (line   25)
50497* mbitfield:                             M680x0 Options.     (line  235)
50498* mbitops <1>:                           SH Options.         (line  166)
50499* mbitops:                               MeP Options.        (line   26)
50500* mblock-move-inline-limit:              RS/6000 and PowerPC Options.
50501                                                             (line  739)
50502* mbranch-cheap:                         PDP-11 Options.     (line   65)
50503* mbranch-cost <1>:                      MIPS Options.       (line  635)
50504* mbranch-cost <2>:                      AVR Options.        (line  150)
50505* mbranch-cost:                          Adapteva Epiphany Options.
50506                                                             (line   18)
50507* mbranch-cost=NUM:                      SH Options.         (line  467)
50508* mbranch-cost=NUMBER:                   M32R/D Options.     (line   82)
50509* mbranch-expensive:                     PDP-11 Options.     (line   61)
50510* mbranch-hints:                         SPU Options.        (line   27)
50511* mbranch-likely:                        MIPS Options.       (line  642)
50512* mbranch-predict:                       MMIX Options.       (line   49)
50513* mbss-plt:                              RS/6000 and PowerPC Options.
50514                                                             (line  189)
50515* mbuild-constants:                      DEC Alpha Options.  (line  141)
50516* mbwx:                                  DEC Alpha Options.  (line  163)
50517* mc68000:                               M680x0 Options.     (line   95)
50518* mc68020:                               M680x0 Options.     (line  109)
50519* mc=:                                   MeP Options.        (line   31)
50520* mcache-size:                           SPU Options.        (line   70)
50521* mcall-eabi:                            RS/6000 and PowerPC Options.
50522                                                             (line  580)
50523* mcall-freebsd:                         RS/6000 and PowerPC Options.
50524                                                             (line  594)
50525* mcall-linux:                           RS/6000 and PowerPC Options.
50526                                                             (line  590)
50527* mcall-netbsd:                          RS/6000 and PowerPC Options.
50528                                                             (line  598)
50529* mcall-prologues:                       AVR Options.        (line  155)
50530* mcall-sysv:                            RS/6000 and PowerPC Options.
50531                                                             (line  572)
50532* mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
50533                                                             (line  580)
50534* mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
50535                                                             (line  583)
50536* mcallee-super-interworking:            ARM Options.        (line  266)
50537* mcaller-super-interworking:            ARM Options.        (line  273)
50538* mcallgraph-data:                       MCore Options.      (line   31)
50539* mcbcond:                               SPARC Options.      (line  224)
50540* mcbranchdi:                            SH Options.         (line  482)
50541* mcc-init:                              CRIS Options.       (line   41)
50542* mcfv4e:                                M680x0 Options.     (line  172)
50543* mcheck-zero-division:                  MIPS Options.       (line  441)
50544* mcix:                                  DEC Alpha Options.  (line  163)
50545* mcld:                                  i386 and x86-64 Options.
50546                                                             (line  594)
50547* mclip:                                 MeP Options.        (line   35)
50548* mcmodel:                               SPARC Options.      (line  262)
50549* mcmodel=kernel:                        i386 and x86-64 Options.
50550                                                             (line  868)
50551* mcmodel=large <1>:                     TILE-Gx Options.    (line   14)
50552* mcmodel=large <2>:                     RS/6000 and PowerPC Options.
50553                                                             (line  130)
50554* mcmodel=large <3>:                     i386 and x86-64 Options.
50555                                                             (line  880)
50556* mcmodel=large:                         AArch64 Options.    (line   33)
50557* mcmodel=medium <1>:                    RS/6000 and PowerPC Options.
50558                                                             (line  126)
50559* mcmodel=medium:                        i386 and x86-64 Options.
50560                                                             (line  873)
50561* mcmodel=small <1>:                     TILE-Gx Options.    (line    9)
50562* mcmodel=small <2>:                     RS/6000 and PowerPC Options.
50563                                                             (line  122)
50564* mcmodel=small <3>:                     i386 and x86-64 Options.
50565                                                             (line  862)
50566* mcmodel=small:                         AArch64 Options.    (line   27)
50567* mcmodel=tiny:                          AArch64 Options.    (line   20)
50568* mcmove:                                Adapteva Epiphany Options.
50569                                                             (line   23)
50570* mcmpb:                                 RS/6000 and PowerPC Options.
50571                                                             (line   27)
50572* mcmpeqdi:                              SH Options.         (line  485)
50573* mcode-readable:                        MIPS Options.       (line  401)
50574* mcompat-align-parm:                    RS/6000 and PowerPC Options.
50575                                                             (line  897)
50576* mcond-exec:                            FRV Options.        (line  152)
50577* mcond-move:                            FRV Options.        (line  128)
50578* mconfig=:                              MeP Options.        (line   39)
50579* mconsole:                              i386 and x86-64 Windows Options.
50580                                                             (line    9)
50581* mconst-align:                          CRIS Options.       (line   55)
50582* mconst16:                              Xtensa Options.     (line   10)
50583* mconstant-gp:                          IA-64 Options.      (line   46)
50584* mcop:                                  MeP Options.        (line   48)
50585* mcop32:                                MeP Options.        (line   53)
50586* mcop64:                                MeP Options.        (line   56)
50587* mcorea:                                Blackfin Options.   (line  157)
50588* mcoreb:                                Blackfin Options.   (line  164)
50589* mcpu <1>:                              TILEPro Options.    (line    9)
50590* mcpu <2>:                              TILE-Gx Options.    (line   18)
50591* mcpu <3>:                              SPARC Options.      (line  102)
50592* mcpu <4>:                              RS/6000 and PowerPC Options.
50593                                                             (line   69)
50594* mcpu <5>:                              picoChip Options.   (line    9)
50595* mcpu <6>:                              M680x0 Options.     (line   28)
50596* mcpu <7>:                              i386 and x86-64 Options.
50597                                                             (line  229)
50598* mcpu <8>:                              FRV Options.        (line  212)
50599* mcpu <9>:                              DEC Alpha Options.  (line  215)
50600* mcpu <10>:                             CRIS Options.       (line   10)
50601* mcpu <11>:                             ARM Options.        (line  124)
50602* mcpu:                                  AArch64 Options.    (line   76)
50603* mcpu32:                                M680x0 Options.     (line  138)
50604* mcpu= <1>:                             MicroBlaze Options. (line   20)
50605* mcpu= <2>:                             M32C Options.       (line    7)
50606* mcpu=:                                 Blackfin Options.   (line    7)
50607* mcr16c:                                CR16 Options.       (line   14)
50608* mcr16cplus:                            CR16 Options.       (line   14)
50609* mcrc32:                                i386 and x86-64 Options.
50610                                                             (line  641)
50611* mcrypto:                               RS/6000 and PowerPC Options.
50612                                                             (line  224)
50613* mcsync-anomaly:                        Blackfin Options.   (line   60)
50614* mcx16:                                 i386 and x86-64 Options.
50615                                                             (line  618)
50616* MD:                                    Preprocessor Options.
50617                                                             (line  274)
50618* mdalign:                               SH Options.         (line  153)
50619* mdata-align:                           CRIS Options.       (line   55)
50620* mdata-model:                           CR16 Options.       (line   28)
50621* mdc:                                   MeP Options.        (line   62)
50622* mdebug <1>:                            S/390 and zSeries Options.
50623                                                             (line  112)
50624* mdebug:                                M32R/D Options.     (line   69)
50625* mdebug-main=PREFIX:                    VMS Options.        (line   13)
50626* mdec-asm:                              PDP-11 Options.     (line   72)
50627* mdirect-move:                          RS/6000 and PowerPC Options.
50628                                                             (line  230)
50629* mdisable-callt:                        V850 Options.       (line   92)
50630* mdisable-fpregs:                       HPPA Options.       (line   33)
50631* mdisable-indexing:                     HPPA Options.       (line   39)
50632* mdiv <1>:                              MeP Options.        (line   65)
50633* mdiv <2>:                              MCore Options.      (line   15)
50634* mdiv:                                  M680x0 Options.     (line  209)
50635* mdiv=STRATEGY:                         SH Options.         (line  309)
50636* mdivide-breaks:                        MIPS Options.       (line  447)
50637* mdivide-enabled:                       LM32 Options.       (line   12)
50638* mdivide-traps:                         MIPS Options.       (line  447)
50639* mdivsi3_libfunc=NAME:                  SH Options.         (line  407)
50640* mdll:                                  i386 and x86-64 Windows Options.
50641                                                             (line   16)
50642* mdlmzb:                                RS/6000 and PowerPC Options.
50643                                                             (line  450)
50644* mdmx:                                  MIPS Options.       (line  290)
50645* mdouble:                               FRV Options.        (line   38)
50646* mdouble-float <1>:                     RS/6000 and PowerPC Options.
50647                                                             (line  373)
50648* mdouble-float:                         MIPS Options.       (line  248)
50649* mdsp:                                  MIPS Options.       (line  267)
50650* mdspr2:                                MIPS Options.       (line  273)
50651* mdual-nops:                            SPU Options.        (line   90)
50652* mdwarf2-asm:                           IA-64 Options.      (line   94)
50653* mdword:                                FRV Options.        (line   32)
50654* mdynamic-no-pic:                       RS/6000 and PowerPC Options.
50655                                                             (line  510)
50656* mea32:                                 SPU Options.        (line   55)
50657* mea64:                                 SPU Options.        (line   55)
50658* meabi:                                 RS/6000 and PowerPC Options.
50659                                                             (line  687)
50660* mearly-stop-bits:                      IA-64 Options.      (line  100)
50661* meb <1>:                               Score Options.      (line    9)
50662* meb <2>:                               Moxie Options.      (line    7)
50663* meb:                                   MeP Options.        (line   68)
50664* mel <1>:                               Score Options.      (line   12)
50665* mel <2>:                               Moxie Options.      (line   11)
50666* mel:                                   MeP Options.        (line   71)
50667* melf <1>:                              MMIX Options.       (line   44)
50668* melf:                                  CRIS Options.       (line   87)
50669* memb:                                  RS/6000 and PowerPC Options.
50670                                                             (line  682)
50671* membedded-data:                        MIPS Options.       (line  388)
50672* memregs=:                              M32C Options.       (line   21)
50673* mep:                                   V850 Options.       (line   16)
50674* mepsilon:                              MMIX Options.       (line   15)
50675* merror-reloc:                          SPU Options.        (line   10)
50676* mesa:                                  S/390 and zSeries Options.
50677                                                             (line   95)
50678* metrax100:                             CRIS Options.       (line   26)
50679* metrax4:                               CRIS Options.       (line   26)
50680* mexplicit-relocs <1>:                  MIPS Options.       (line  432)
50681* mexplicit-relocs:                      DEC Alpha Options.  (line  176)
50682* mexr:                                  H8/300 Options.     (line   28)
50683* mextern-sdata:                         MIPS Options.       (line  350)
50684* MF:                                    Preprocessor Options.
50685                                                             (line  220)
50686* mfast-fp:                              Blackfin Options.   (line  133)
50687* mfast-indirect-calls:                  HPPA Options.       (line   51)
50688* mfaster-structs:                       SPARC Options.      (line   92)
50689* mfdpic:                                FRV Options.        (line   56)
50690* mfentry:                               i386 and x86-64 Options.
50691                                                             (line  817)
50692* mfix:                                  DEC Alpha Options.  (line  163)
50693* mfix-24k:                              MIPS Options.       (line  500)
50694* mfix-and-continue:                     Darwin Options.     (line  104)
50695* mfix-at697f:                           SPARC Options.      (line  244)
50696* mfix-cortex-m3-ldrd:                   ARM Options.        (line  306)
50697* mfix-r10000:                           MIPS Options.       (line  527)
50698* mfix-r4000:                            MIPS Options.       (line  506)
50699* mfix-r4400:                            MIPS Options.       (line  520)
50700* mfix-sb1:                              MIPS Options.       (line  559)
50701* mfix-ut699:                            SPARC Options.      (line  249)
50702* mfix-vr4120:                           MIPS Options.       (line  538)
50703* mfix-vr4130:                           MIPS Options.       (line  552)
50704* mfixed-cc:                             FRV Options.        (line   28)
50705* mfixed-range <1>:                      SPU Options.        (line   47)
50706* mfixed-range <2>:                      SH Options.         (line  414)
50707* mfixed-range <3>:                      IA-64 Options.      (line  105)
50708* mfixed-range:                          HPPA Options.       (line   58)
50709* mflat:                                 SPARC Options.      (line   22)
50710* mflip-mips16:                          MIPS Options.       (line  111)
50711* mfloat-abi:                            ARM Options.        (line   42)
50712* mfloat-gprs:                           RS/6000 and PowerPC Options.
50713                                                             (line  261)
50714* mfloat-ieee:                           DEC Alpha Options.  (line  171)
50715* mfloat-vax:                            DEC Alpha Options.  (line  171)
50716* mfloat32:                              PDP-11 Options.     (line   52)
50717* mfloat64:                              PDP-11 Options.     (line   48)
50718* mflush-func:                           MIPS Options.       (line  626)
50719* mflush-func=NAME:                      M32R/D Options.     (line   93)
50720* mflush-trap=NUMBER:                    M32R/D Options.     (line   86)
50721* mfmaf:                                 SPARC Options.      (line  238)
50722* mfmovd:                                SH Options.         (line  169)
50723* mforce-no-pic:                         Xtensa Options.     (line   41)
50724* mfp-exceptions:                        MIPS Options.       (line  653)
50725* mfp-mode:                              Adapteva Epiphany Options.
50726                                                             (line   72)
50727* mfp-reg:                               DEC Alpha Options.  (line   25)
50728* mfp-rounding-mode:                     DEC Alpha Options.  (line   85)
50729* mfp-trap-mode:                         DEC Alpha Options.  (line   63)
50730* mfp16-format:                          ARM Options.        (line  164)
50731* mfp32:                                 MIPS Options.       (line  221)
50732* mfp64:                                 MIPS Options.       (line  224)
50733* mfpmath <1>:                           i386 and x86-64 Options.
50734                                                             (line  232)
50735* mfpmath:                               Optimize Options.   (line 1898)
50736* mfpr-32:                               FRV Options.        (line   13)
50737* mfpr-64:                               FRV Options.        (line   16)
50738* mfprnd:                                RS/6000 and PowerPC Options.
50739                                                             (line   27)
50740* mfpu <1>:                              SPARC Options.      (line   35)
50741* mfpu <2>:                              RS/6000 and PowerPC Options.
50742                                                             (line  381)
50743* mfpu <3>:                              PDP-11 Options.     (line    9)
50744* mfpu:                                  ARM Options.        (line  144)
50745* mfriz:                                 RS/6000 and PowerPC Options.
50746                                                             (line  868)
50747* mfsca:                                 SH Options.         (line  499)
50748* mfsrra:                                SH Options.         (line  508)
50749* mfull-toc:                             RS/6000 and PowerPC Options.
50750                                                             (line  289)
50751* mfused-madd <1>:                       Xtensa Options.     (line   19)
50752* mfused-madd <2>:                       SH Options.         (line  490)
50753* mfused-madd <3>:                       S/390 and zSeries Options.
50754                                                             (line  137)
50755* mfused-madd <4>:                       RS/6000 and PowerPC Options.
50756                                                             (line  434)
50757* mfused-madd <5>:                       MIPS Options.       (line  482)
50758* mfused-madd:                           IA-64 Options.      (line   88)
50759* mg:                                    VAX Options.        (line   17)
50760* MG:                                    Preprocessor Options.
50761                                                             (line  229)
50762* mgas:                                  HPPA Options.       (line   74)
50763* mgcc-abi:                              V850 Options.       (line  148)
50764* mgen-cell-microcode:                   RS/6000 and PowerPC Options.
50765                                                             (line  177)
50766* mgeneral-regs-only:                    AArch64 Options.    (line   13)
50767* mgettrcost=NUMBER:                     SH Options.         (line  431)
50768* mghs:                                  V850 Options.       (line  127)
50769* mglibc:                                GNU/Linux Options.  (line    9)
50770* mgnu:                                  VAX Options.        (line   13)
50771* mgnu-as:                               IA-64 Options.      (line   18)
50772* mgnu-ld <1>:                           IA-64 Options.      (line   23)
50773* mgnu-ld:                               HPPA Options.       (line  110)
50774* mgotplt:                               CRIS Options.       (line   81)
50775* mgp32:                                 MIPS Options.       (line  215)
50776* mgp64:                                 MIPS Options.       (line  218)
50777* mgpopt:                                MIPS Options.       (line  373)
50778* mgpr-32:                               FRV Options.        (line    7)
50779* mgpr-64:                               FRV Options.        (line   10)
50780* mgprel-ro:                             FRV Options.        (line   79)
50781* mh:                                    H8/300 Options.     (line   14)
50782* mhalf-reg-file:                        Adapteva Epiphany Options.
50783                                                             (line    9)
50784* mhard-dfp <1>:                         S/390 and zSeries Options.
50785                                                             (line   20)
50786* mhard-dfp:                             RS/6000 and PowerPC Options.
50787                                                             (line   27)
50788* mhard-float <1>:                       V850 Options.       (line  113)
50789* mhard-float <2>:                       SPARC Options.      (line   35)
50790* mhard-float <3>:                       S/390 and zSeries Options.
50791                                                             (line   11)
50792* mhard-float <4>:                       RS/6000 and PowerPC Options.
50793                                                             (line  367)
50794* mhard-float <5>:                       MIPS Options.       (line  227)
50795* mhard-float <6>:                       MicroBlaze Options. (line   10)
50796* mhard-float <7>:                       M680x0 Options.     (line  197)
50797* mhard-float:                           FRV Options.        (line   19)
50798* mhard-quad-float:                      SPARC Options.      (line   56)
50799* mhardlit:                              MCore Options.      (line   10)
50800* mhint-max-distance:                    SPU Options.        (line  102)
50801* mhint-max-nops:                        SPU Options.        (line   96)
50802* mhotpatch:                             S/390 and zSeries Options.
50803                                                             (line  173)
50804* mhp-ld:                                HPPA Options.       (line  122)
50805* micplb:                                Blackfin Options.   (line  178)
50806* mid-shared-library:                    Blackfin Options.   (line   81)
50807* mieee <1>:                             SH Options.         (line  186)
50808* mieee:                                 DEC Alpha Options.  (line   39)
50809* mieee-conformant:                      DEC Alpha Options.  (line  134)
50810* mieee-fp:                              i386 and x86-64 Options.
50811                                                             (line  287)
50812* mieee-with-inexact:                    DEC Alpha Options.  (line   52)
50813* milp32:                                IA-64 Options.      (line  121)
50814* mimpure-text:                          Solaris 2 Options.  (line    9)
50815* mincoming-stack-boundary:              i386 and x86-64 Options.
50816                                                             (line  492)
50817* mindexed-addressing:                   SH Options.         (line  421)
50818* minline-all-stringops:                 i386 and x86-64 Options.
50819                                                             (line  765)
50820* minline-float-divide-max-throughput:   IA-64 Options.      (line   58)
50821* minline-float-divide-min-latency:      IA-64 Options.      (line   54)
50822* minline-ic_invalidate:                 SH Options.         (line  195)
50823* minline-int-divide-max-throughput:     IA-64 Options.      (line   69)
50824* minline-int-divide-min-latency:        IA-64 Options.      (line   65)
50825* minline-plt <1>:                       FRV Options.        (line   64)
50826* minline-plt:                           Blackfin Options.   (line  138)
50827* minline-sqrt-max-throughput:           IA-64 Options.      (line   80)
50828* minline-sqrt-min-latency:              IA-64 Options.      (line   76)
50829* minline-stringops-dynamically:         i386 and x86-64 Options.
50830                                                             (line  772)
50831* minsert-sched-nops:                    RS/6000 and PowerPC Options.
50832                                                             (line  550)
50833* mint-register:                         RX Options.         (line  100)
50834* mint16:                                PDP-11 Options.     (line   40)
50835* mint32 <1>:                            PDP-11 Options.     (line   44)
50836* mint32 <2>:                            H8/300 Options.     (line   38)
50837* mint32:                                CR16 Options.       (line   22)
50838* mint8:                                 AVR Options.        (line  159)
50839* minterlink-mips16:                     MIPS Options.       (line  118)
50840* minvalid-symbols:                      SH Options.         (line  457)
50841* mio-volatile:                          MeP Options.        (line   74)
50842* mips1:                                 MIPS Options.       (line   78)
50843* mips16:                                MIPS Options.       (line  103)
50844* mips2:                                 MIPS Options.       (line   81)
50845* mips3:                                 MIPS Options.       (line   84)
50846* mips32:                                MIPS Options.       (line   90)
50847* mips32r2:                              MIPS Options.       (line   93)
50848* mips3d:                                MIPS Options.       (line  296)
50849* mips4:                                 MIPS Options.       (line   87)
50850* mips64:                                MIPS Options.       (line   96)
50851* mips64r2:                              MIPS Options.       (line   99)
50852* misel:                                 RS/6000 and PowerPC Options.
50853                                                             (line  195)
50854* misize:                                SH Options.         (line  207)
50855* missue-rate=NUMBER:                    M32R/D Options.     (line   79)
50856* mivc2:                                 MeP Options.        (line   59)
50857* mjump-in-delay:                        HPPA Options.       (line   28)
50858* mkernel:                               Darwin Options.     (line   82)
50859* mknuthdiv:                             MMIX Options.       (line   33)
50860* ml <1>:                                SH Options.         (line  150)
50861* ml:                                    MeP Options.        (line   78)
50862* mlarge-data:                           DEC Alpha Options.  (line  187)
50863* mlarge-data-threshold:                 i386 and x86-64 Options.
50864                                                             (line  378)
50865* mlarge-mem:                            SPU Options.        (line   35)
50866* mlarge-text:                           DEC Alpha Options.  (line  205)
50867* mleadz:                                MeP Options.        (line   81)
50868* mleaf-id-shared-library:               Blackfin Options.   (line   92)
50869* mlibfuncs:                             MMIX Options.       (line   10)
50870* mlibrary-pic:                          FRV Options.        (line  110)
50871* mlinked-fp:                            FRV Options.        (line   94)
50872* mlinker-opt:                           HPPA Options.       (line   84)
50873* mlinux:                                CRIS Options.       (line   91)
50874* mlittle:                               RS/6000 and PowerPC Options.
50875                                                             (line  499)
50876* mlittle-endian <1>:                    RS/6000 and PowerPC Options.
50877                                                             (line  499)
50878* mlittle-endian <2>:                    MicroBlaze Options. (line   60)
50879* mlittle-endian <3>:                    MCore Options.      (line   39)
50880* mlittle-endian <4>:                    IA-64 Options.      (line   13)
50881* mlittle-endian <5>:                    C6X Options.        (line   16)
50882* mlittle-endian <6>:                    ARM Options.        (line   58)
50883* mlittle-endian:                        AArch64 Options.    (line   16)
50884* mlittle-endian-data:                   RX Options.         (line   42)
50885* mliw:                                  MN10300 Options.    (line   54)
50886* mllsc:                                 MIPS Options.       (line  253)
50887* mlocal-sdata:                          MIPS Options.       (line  338)
50888* mlong-calls <1>:                       V850 Options.       (line   10)
50889* mlong-calls <2>:                       MIPS Options.       (line  468)
50890* mlong-calls <3>:                       FRV Options.        (line   99)
50891* mlong-calls <4>:                       Blackfin Options.   (line  121)
50892* mlong-calls <5>:                       ARM Options.        (line  189)
50893* mlong-calls:                           Adapteva Epiphany Options.
50894                                                             (line   55)
50895* mlong-double-128:                      S/390 and zSeries Options.
50896                                                             (line   29)
50897* mlong-double-64 <1>:                   S/390 and zSeries Options.
50898                                                             (line   29)
50899* mlong-double-64:                       i386 and x86-64 Options.
50900                                                             (line  367)
50901* mlong-double-80:                       i386 and x86-64 Options.
50902                                                             (line  367)
50903* mlong-jumps:                           V850 Options.       (line  108)
50904* mlong-load-store:                      HPPA Options.       (line   65)
50905* mlong32:                               MIPS Options.       (line  313)
50906* mlong64:                               MIPS Options.       (line  308)
50907* mlongcall:                             RS/6000 and PowerPC Options.
50908                                                             (line  759)
50909* mlongcalls:                            Xtensa Options.     (line   72)
50910* mloop:                                 V850 Options.       (line  121)
50911* mlow-64k:                              Blackfin Options.   (line   70)
50912* mlp64:                                 IA-64 Options.      (line  121)
50913* mm:                                    MeP Options.        (line   84)
50914* MM:                                    Preprocessor Options.
50915                                                             (line  210)
50916* mmac <1>:                              Score Options.      (line   21)
50917* mmac:                                  CR16 Options.       (line    9)
50918* mmad:                                  MIPS Options.       (line  477)
50919* mmalloc64:                             VMS Options.        (line   17)
50920* mmax:                                  DEC Alpha Options.  (line  163)
50921* mmax-constant-size:                    RX Options.         (line   82)
50922* mmax-stack-frame:                      CRIS Options.       (line   22)
50923* mmcount-ra-address:                    MIPS Options.       (line  702)
50924* mmcu <1>:                              MIPS Options.       (line  305)
50925* mmcu:                                  AVR Options.        (line    9)
50926* MMD:                                   Preprocessor Options.
50927                                                             (line  290)
50928* mmedia:                                FRV Options.        (line   44)
50929* mmemcpy <1>:                           MIPS Options.       (line  462)
50930* mmemcpy:                               MicroBlaze Options. (line   13)
50931* mmemory-latency:                       DEC Alpha Options.  (line  268)
50932* mmemory-model:                         SPARC Options.      (line  290)
50933* mmfcrf:                                RS/6000 and PowerPC Options.
50934                                                             (line   27)
50935* mmfpgpr:                               RS/6000 and PowerPC Options.
50936                                                             (line   27)
50937* mminimal-toc:                          RS/6000 and PowerPC Options.
50938                                                             (line  289)
50939* mminmax:                               MeP Options.        (line   87)
50940* mmmx:                                  i386 and x86-64 Options.
50941                                                             (line  571)
50942* mmodel=large:                          M32R/D Options.     (line   33)
50943* mmodel=medium:                         M32R/D Options.     (line   27)
50944* mmodel=small:                          M32R/D Options.     (line   18)
50945* mmovbe:                                i386 and x86-64 Options.
50946                                                             (line  637)
50947* mmt:                                   MIPS Options.       (line  301)
50948* mmul:                                  RL78 Options.       (line   13)
50949* mmul-bug-workaround:                   CRIS Options.       (line   31)
50950* mmuladd:                               FRV Options.        (line   50)
50951* mmulhw:                                RS/6000 and PowerPC Options.
50952                                                             (line  443)
50953* mmult:                                 MeP Options.        (line   90)
50954* mmult-bug:                             MN10300 Options.    (line    9)
50955* mmulti-cond-exec:                      FRV Options.        (line  176)
50956* mmulticore:                            Blackfin Options.   (line  142)
50957* mmultiple:                             RS/6000 and PowerPC Options.
50958                                                             (line  393)
50959* mmvcle:                                S/390 and zSeries Options.
50960                                                             (line  105)
50961* mmvme:                                 RS/6000 and PowerPC Options.
50962                                                             (line  663)
50963* mn:                                    H8/300 Options.     (line   20)
50964* mnested-cond-exec:                     FRV Options.        (line  189)
50965* mnhwloop:                              Score Options.      (line   15)
50966* mno-3dnow:                             i386 and x86-64 Options.
50967                                                             (line  571)
50968* mno-4byte-functions:                   MCore Options.      (line   27)
50969* mno-8byte-align:                       V850 Options.       (line  170)
50970* mno-abicalls:                          MIPS Options.       (line  155)
50971* mno-abshi:                             PDP-11 Options.     (line   58)
50972* mno-ac0:                               PDP-11 Options.     (line   20)
50973* mno-address-space-conversion:          SPU Options.        (line   63)
50974* mno-align-double:                      i386 and x86-64 Options.
50975                                                             (line  326)
50976* mno-align-int:                         M680x0 Options.     (line  267)
50977* mno-align-loops:                       M32R/D Options.     (line   76)
50978* mno-align-stringops:                   i386 and x86-64 Options.
50979                                                             (line  760)
50980* mno-altivec:                           RS/6000 and PowerPC Options.
50981                                                             (line  136)
50982* mno-am33:                              MN10300 Options.    (line   20)
50983* mno-app-regs <1>:                      V850 Options.       (line  185)
50984* mno-app-regs:                          SPARC Options.      (line   10)
50985* mno-as100-syntax:                      RX Options.         (line   76)
50986* mno-atomic-updates:                    SPU Options.        (line   78)
50987* mno-avoid-indexed-addresses:           RS/6000 and PowerPC Options.
50988                                                             (line  425)
50989* mno-backchain:                         S/390 and zSeries Options.
50990                                                             (line   35)
50991* mno-base-addresses:                    MMIX Options.       (line   54)
50992* mno-bit-align:                         RS/6000 and PowerPC Options.
50993                                                             (line  457)
50994* mno-bitfield:                          M680x0 Options.     (line  231)
50995* mno-branch-likely:                     MIPS Options.       (line  642)
50996* mno-branch-predict:                    MMIX Options.       (line   49)
50997* mno-bwx:                               DEC Alpha Options.  (line  163)
50998* mno-callgraph-data:                    MCore Options.      (line   31)
50999* mno-cbcond:                            SPARC Options.      (line  224)
51000* mno-check-zero-division:               MIPS Options.       (line  441)
51001* mno-cix:                               DEC Alpha Options.  (line  163)
51002* mno-clearbss:                          MicroBlaze Options. (line   16)
51003* mno-cmpb:                              RS/6000 and PowerPC Options.
51004                                                             (line   27)
51005* mno-cond-exec:                         FRV Options.        (line  158)
51006* mno-cond-move:                         FRV Options.        (line  134)
51007* mno-const-align:                       CRIS Options.       (line   55)
51008* mno-const16:                           Xtensa Options.     (line   10)
51009* mno-crt0 <1>:                          Moxie Options.      (line   14)
51010* mno-crt0:                              MN10300 Options.    (line   43)
51011* mno-crypto:                            RS/6000 and PowerPC Options.
51012                                                             (line  224)
51013* mno-csync-anomaly:                     Blackfin Options.   (line   66)
51014* mno-data-align:                        CRIS Options.       (line   55)
51015* mno-debug:                             S/390 and zSeries Options.
51016                                                             (line  112)
51017* mno-direct-move:                       RS/6000 and PowerPC Options.
51018                                                             (line  230)
51019* mno-disable-callt:                     V850 Options.       (line   92)
51020* mno-div <1>:                           MCore Options.      (line   15)
51021* mno-div:                               M680x0 Options.     (line  209)
51022* mno-dlmzb:                             RS/6000 and PowerPC Options.
51023                                                             (line  450)
51024* mno-double:                            FRV Options.        (line   41)
51025* mno-dsp:                               MIPS Options.       (line  267)
51026* mno-dspr2:                             MIPS Options.       (line  273)
51027* mno-dwarf2-asm:                        IA-64 Options.      (line   94)
51028* mno-dword:                             FRV Options.        (line   35)
51029* mno-eabi:                              RS/6000 and PowerPC Options.
51030                                                             (line  687)
51031* mno-early-stop-bits:                   IA-64 Options.      (line  100)
51032* mno-eflags:                            FRV Options.        (line  125)
51033* mno-embedded-data:                     MIPS Options.       (line  388)
51034* mno-ep:                                V850 Options.       (line   16)
51035* mno-epsilon:                           MMIX Options.       (line   15)
51036* mno-explicit-relocs <1>:               MIPS Options.       (line  432)
51037* mno-explicit-relocs:                   DEC Alpha Options.  (line  176)
51038* mno-exr:                               H8/300 Options.     (line   33)
51039* mno-extern-sdata:                      MIPS Options.       (line  350)
51040* mno-fancy-math-387:                    i386 and x86-64 Options.
51041                                                             (line  315)
51042* mno-faster-structs:                    SPARC Options.      (line   92)
51043* mno-fix:                               DEC Alpha Options.  (line  163)
51044* mno-fix-24k:                           MIPS Options.       (line  500)
51045* mno-fix-r10000:                        MIPS Options.       (line  527)
51046* mno-fix-r4000:                         MIPS Options.       (line  506)
51047* mno-fix-r4400:                         MIPS Options.       (line  520)
51048* mno-flat:                              SPARC Options.      (line   22)
51049* mno-float:                             MIPS Options.       (line  234)
51050* mno-float32:                           PDP-11 Options.     (line   48)
51051* mno-float64:                           PDP-11 Options.     (line   52)
51052* mno-flush-func:                        M32R/D Options.     (line   98)
51053* mno-flush-trap:                        M32R/D Options.     (line   90)
51054* mno-fmaf:                              SPARC Options.      (line  238)
51055* mno-fp-in-toc:                         RS/6000 and PowerPC Options.
51056                                                             (line  289)
51057* mno-fp-regs:                           DEC Alpha Options.  (line   25)
51058* mno-fp-ret-in-387:                     i386 and x86-64 Options.
51059                                                             (line  305)
51060* mno-fprnd:                             RS/6000 and PowerPC Options.
51061                                                             (line   27)
51062* mno-fpu:                               SPARC Options.      (line   40)
51063* mno-fsca:                              SH Options.         (line  499)
51064* mno-fsrra:                             SH Options.         (line  508)
51065* mno-fused-madd <1>:                    Xtensa Options.     (line   19)
51066* mno-fused-madd <2>:                    SH Options.         (line  490)
51067* mno-fused-madd <3>:                    S/390 and zSeries Options.
51068                                                             (line  137)
51069* mno-fused-madd <4>:                    RS/6000 and PowerPC Options.
51070                                                             (line  434)
51071* mno-fused-madd <5>:                    MIPS Options.       (line  482)
51072* mno-fused-madd:                        IA-64 Options.      (line   88)
51073* mno-gnu-as:                            IA-64 Options.      (line   18)
51074* mno-gnu-ld:                            IA-64 Options.      (line   23)
51075* mno-gotplt:                            CRIS Options.       (line   81)
51076* mno-gpopt:                             MIPS Options.       (line  373)
51077* mno-hard-dfp <1>:                      S/390 and zSeries Options.
51078                                                             (line   20)
51079* mno-hard-dfp:                          RS/6000 and PowerPC Options.
51080                                                             (line   27)
51081* mno-hardlit:                           MCore Options.      (line   10)
51082* mno-id-shared-library:                 Blackfin Options.   (line   88)
51083* mno-ieee:                              SH Options.         (line  186)
51084* mno-ieee-fp:                           i386 and x86-64 Options.
51085                                                             (line  287)
51086* mno-inline-float-divide:               IA-64 Options.      (line   62)
51087* mno-inline-int-divide:                 IA-64 Options.      (line   73)
51088* mno-inline-sqrt:                       IA-64 Options.      (line   84)
51089* mno-int16:                             PDP-11 Options.     (line   44)
51090* mno-int32:                             PDP-11 Options.     (line   40)
51091* mno-interlink-mips16:                  MIPS Options.       (line  118)
51092* mno-interrupts:                        AVR Options.        (line  165)
51093* mno-isel:                              RS/6000 and PowerPC Options.
51094                                                             (line  195)
51095* mno-knuthdiv:                          MMIX Options.       (line   33)
51096* mno-leaf-id-shared-library:            Blackfin Options.   (line   98)
51097* mno-libfuncs:                          MMIX Options.       (line   10)
51098* mno-llsc:                              MIPS Options.       (line  253)
51099* mno-local-sdata:                       MIPS Options.       (line  338)
51100* mno-long-calls <1>:                    V850 Options.       (line   10)
51101* mno-long-calls <2>:                    MIPS Options.       (line  468)
51102* mno-long-calls <3>:                    HPPA Options.       (line  135)
51103* mno-long-calls <4>:                    Blackfin Options.   (line  121)
51104* mno-long-calls:                        ARM Options.        (line  189)
51105* mno-long-jumps:                        V850 Options.       (line  108)
51106* mno-longcall:                          RS/6000 and PowerPC Options.
51107                                                             (line  759)
51108* mno-longcalls:                         Xtensa Options.     (line   72)
51109* mno-low-64k:                           Blackfin Options.   (line   74)
51110* mno-lsim <1>:                          MCore Options.      (line   46)
51111* mno-lsim:                              FR30 Options.       (line   14)
51112* mno-mad:                               MIPS Options.       (line  477)
51113* mno-max:                               DEC Alpha Options.  (line  163)
51114* mno-mcount-ra-address:                 MIPS Options.       (line  702)
51115* mno-mcu:                               MIPS Options.       (line  305)
51116* mno-mdmx:                              MIPS Options.       (line  290)
51117* mno-media:                             FRV Options.        (line   47)
51118* mno-memcpy:                            MIPS Options.       (line  462)
51119* mno-mfcrf:                             RS/6000 and PowerPC Options.
51120                                                             (line   27)
51121* mno-mfpgpr:                            RS/6000 and PowerPC Options.
51122                                                             (line   27)
51123* mno-mips16:                            MIPS Options.       (line  103)
51124* mno-mips3d:                            MIPS Options.       (line  296)
51125* mno-mmx:                               i386 and x86-64 Options.
51126                                                             (line  571)
51127* mno-mt:                                MIPS Options.       (line  301)
51128* mno-mul-bug-workaround:                CRIS Options.       (line   31)
51129* mno-muladd:                            FRV Options.        (line   53)
51130* mno-mulhw:                             RS/6000 and PowerPC Options.
51131                                                             (line  443)
51132* mno-mult-bug:                          MN10300 Options.    (line   13)
51133* mno-multi-cond-exec:                   FRV Options.        (line  183)
51134* mno-multiple:                          RS/6000 and PowerPC Options.
51135                                                             (line  393)
51136* mno-mvcle:                             S/390 and zSeries Options.
51137                                                             (line  105)
51138* mno-nested-cond-exec:                  FRV Options.        (line  195)
51139* mno-omit-leaf-frame-pointer:           AArch64 Options.    (line   43)
51140* mno-optimize-membar:                   FRV Options.        (line  205)
51141* mno-opts:                              MeP Options.        (line   93)
51142* mno-pack:                              FRV Options.        (line  122)
51143* mno-packed-stack:                      S/390 and zSeries Options.
51144                                                             (line   54)
51145* mno-paired:                            RS/6000 and PowerPC Options.
51146                                                             (line  209)
51147* mno-paired-single:                     MIPS Options.       (line  284)
51148* mno-pic:                               IA-64 Options.      (line   26)
51149* mno-pid:                               RX Options.         (line  117)
51150* mno-plt:                               MIPS Options.       (line  182)
51151* mno-popc:                              SPARC Options.      (line  231)
51152* mno-popcntb:                           RS/6000 and PowerPC Options.
51153                                                             (line   27)
51154* mno-popcntd:                           RS/6000 and PowerPC Options.
51155                                                             (line   27)
51156* mno-postinc:                           Adapteva Epiphany Options.
51157                                                             (line  110)
51158* mno-postmodify:                        Adapteva Epiphany Options.
51159                                                             (line  110)
51160* mno-power8-fusion:                     RS/6000 and PowerPC Options.
51161                                                             (line  236)
51162* mno-power8-vector:                     RS/6000 and PowerPC Options.
51163                                                             (line  242)
51164* mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
51165                                                             (line   27)
51166* mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
51167                                                             (line   27)
51168* mno-powerpc64:                         RS/6000 and PowerPC Options.
51169                                                             (line   27)
51170* mno-prolog-function:                   V850 Options.       (line   23)
51171* mno-prologue-epilogue:                 CRIS Options.       (line   71)
51172* mno-prototype:                         RS/6000 and PowerPC Options.
51173                                                             (line  647)
51174* mno-push-args:                         i386 and x86-64 Options.
51175                                                             (line  737)
51176* mno-quad-memory:                       RS/6000 and PowerPC Options.
51177                                                             (line  249)
51178* mno-quad-memory-atomic:                RS/6000 and PowerPC Options.
51179                                                             (line  255)
51180* mno-red-zone:                          i386 and x86-64 Options.
51181                                                             (line  854)
51182* mno-register-names:                    IA-64 Options.      (line   37)
51183* mno-regnames:                          RS/6000 and PowerPC Options.
51184                                                             (line  753)
51185* mno-relax:                             V850 Options.       (line  103)
51186* mno-relax-immediate:                   MCore Options.      (line   19)
51187* mno-relocatable:                       RS/6000 and PowerPC Options.
51188                                                             (line  473)
51189* mno-relocatable-lib:                   RS/6000 and PowerPC Options.
51190                                                             (line  484)
51191* mno-renesas:                           SH Options.         (line  176)
51192* mno-round-nearest:                     Adapteva Epiphany Options.
51193                                                             (line   51)
51194* mno-rtd:                               M680x0 Options.     (line  262)
51195* mno-scc:                               FRV Options.        (line  146)
51196* mno-sched-ar-data-spec:                IA-64 Options.      (line  134)
51197* mno-sched-ar-in-data-spec:             IA-64 Options.      (line  155)
51198* mno-sched-br-data-spec:                IA-64 Options.      (line  128)
51199* mno-sched-br-in-data-spec:             IA-64 Options.      (line  148)
51200* mno-sched-control-spec:                IA-64 Options.      (line  140)
51201* mno-sched-count-spec-in-critical-path: IA-64 Options.      (line  182)
51202* mno-sched-in-control-spec:             IA-64 Options.      (line  162)
51203* mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  175)
51204* mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  168)
51205* mno-sched-prolog:                      ARM Options.        (line   33)
51206* mno-sdata <1>:                         RS/6000 and PowerPC Options.
51207                                                             (line  734)
51208* mno-sdata:                             IA-64 Options.      (line   42)
51209* mno-sep-data:                          Blackfin Options.   (line  116)
51210* mno-serialize-volatile:                Xtensa Options.     (line   35)
51211* mno-short:                             M680x0 Options.     (line  226)
51212* mno-side-effects:                      CRIS Options.       (line   46)
51213* mno-sim:                               RX Options.         (line   71)
51214* mno-single-exit:                       MMIX Options.       (line   66)
51215* mno-slow-bytes:                        MCore Options.      (line   35)
51216* mno-small-exec:                        S/390 and zSeries Options.
51217                                                             (line   80)
51218* mno-smartmips:                         MIPS Options.       (line  280)
51219* mno-soft-cmpsf:                        Adapteva Epiphany Options.
51220                                                             (line   29)
51221* mno-soft-float:                        DEC Alpha Options.  (line   10)
51222* mno-space-regs:                        HPPA Options.       (line   44)
51223* mno-spe:                               RS/6000 and PowerPC Options.
51224                                                             (line  204)
51225* mno-specld-anomaly:                    Blackfin Options.   (line   56)
51226* mno-split-addresses:                   MIPS Options.       (line  426)
51227* mno-sse:                               i386 and x86-64 Options.
51228                                                             (line  571)
51229* mno-stack-align:                       CRIS Options.       (line   55)
51230* mno-stack-bias:                        SPARC Options.      (line  314)
51231* mno-strict-align <1>:                  RS/6000 and PowerPC Options.
51232                                                             (line  468)
51233* mno-strict-align:                      M680x0 Options.     (line  287)
51234* mno-string:                            RS/6000 and PowerPC Options.
51235                                                             (line  404)
51236* mno-sum-in-toc:                        RS/6000 and PowerPC Options.
51237                                                             (line  289)
51238* mno-sym32:                             MIPS Options.       (line  323)
51239* mno-target-align:                      Xtensa Options.     (line   59)
51240* mno-text-section-literals:             Xtensa Options.     (line   47)
51241* mno-tls-markers:                       RS/6000 and PowerPC Options.
51242                                                             (line  792)
51243* mno-toc:                               RS/6000 and PowerPC Options.
51244                                                             (line  493)
51245* mno-toplevel-symbols:                  MMIX Options.       (line   40)
51246* mno-tpf-trace:                         S/390 and zSeries Options.
51247                                                             (line  131)
51248* mno-unaligned-access:                  ARM Options.        (line  313)
51249* mno-unaligned-doubles:                 SPARC Options.      (line   74)
51250* mno-uninit-const-in-rodata:            MIPS Options.       (line  396)
51251* mno-update:                            RS/6000 and PowerPC Options.
51252                                                             (line  415)
51253* mno-user-mode:                         SPARC Options.      (line   86)
51254* mno-usermode:                          SH Options.         (line  298)
51255* mno-v8plus:                            SPARC Options.      (line  195)
51256* mno-vect-double:                       Adapteva Epiphany Options.
51257                                                             (line  116)
51258* mno-vis:                               SPARC Options.      (line  202)
51259* mno-vis2:                              SPARC Options.      (line  208)
51260* mno-vis3:                              SPARC Options.      (line  216)
51261* mno-vliw-branch:                       FRV Options.        (line  170)
51262* mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
51263* mno-vrsave:                            RS/6000 and PowerPC Options.
51264                                                             (line  174)
51265* mno-vsx:                               RS/6000 and PowerPC Options.
51266                                                             (line  218)
51267* mno-warn-multiple-fast-interrupts:     RX Options.         (line  143)
51268* mno-wide-bitfields:                    MCore Options.      (line   23)
51269* mno-xgot <1>:                          MIPS Options.       (line  192)
51270* mno-xgot:                              M680x0 Options.     (line  319)
51271* mno-xl-compat:                         RS/6000 and PowerPC Options.
51272                                                             (line  324)
51273* mno-zdcbranch:                         SH Options.         (line  474)
51274* mno-zero-extend:                       MMIX Options.       (line   27)
51275* mnobitfield:                           M680x0 Options.     (line  231)
51276* mnoliw:                                MN10300 Options.    (line   59)
51277* mnomacsave:                            SH Options.         (line  181)
51278* mnop-fun-dllimport:                    i386 and x86-64 Windows Options.
51279                                                             (line   22)
51280* mnops:                                 Adapteva Epiphany Options.
51281                                                             (line   26)
51282* mnosetlb:                              MN10300 Options.    (line   69)
51283* mnosplit-lohi:                         Adapteva Epiphany Options.
51284                                                             (line  110)
51285* momit-leaf-frame-pointer <1>:          i386 and x86-64 Options.
51286                                                             (line  794)
51287* momit-leaf-frame-pointer <2>:          Blackfin Options.   (line   44)
51288* momit-leaf-frame-pointer:              AArch64 Options.    (line   43)
51289* mone-byte-bool:                        Darwin Options.     (line   90)
51290* moptimize-membar:                      FRV Options.        (line  201)
51291* MP:                                    Preprocessor Options.
51292                                                             (line  239)
51293* mpa-risc-1-0:                          HPPA Options.       (line   19)
51294* mpa-risc-1-1:                          HPPA Options.       (line   19)
51295* mpa-risc-2-0:                          HPPA Options.       (line   19)
51296* mpack:                                 FRV Options.        (line  119)
51297* mpacked-stack:                         S/390 and zSeries Options.
51298                                                             (line   54)
51299* mpadstruct:                            SH Options.         (line  210)
51300* mpaired:                               RS/6000 and PowerPC Options.
51301                                                             (line  209)
51302* mpaired-single:                        MIPS Options.       (line  284)
51303* mpc32:                                 i386 and x86-64 Options.
51304                                                             (line  441)
51305* mpc64:                                 i386 and x86-64 Options.
51306                                                             (line  441)
51307* mpc80:                                 i386 and x86-64 Options.
51308                                                             (line  441)
51309* mpcrel:                                M680x0 Options.     (line  279)
51310* mpdebug:                               CRIS Options.       (line   35)
51311* mpe:                                   RS/6000 and PowerPC Options.
51312                                                             (line  344)
51313* mpe-aligned-commons:                   i386 and x86-64 Windows Options.
51314                                                             (line   59)
51315* mpic-register:                         ARM Options.        (line  219)
51316* mpid:                                  RX Options.         (line  117)
51317* mplt:                                  MIPS Options.       (line  182)
51318* mpointers-to-nested-functions:         RS/6000 and PowerPC Options.
51319                                                             (line  876)
51320* mpoke-function-name:                   ARM Options.        (line  226)
51321* mpopc:                                 SPARC Options.      (line  231)
51322* mpopcntb:                              RS/6000 and PowerPC Options.
51323                                                             (line   27)
51324* mpopcntd:                              RS/6000 and PowerPC Options.
51325                                                             (line   27)
51326* mportable-runtime:                     HPPA Options.       (line   70)
51327* mpower8-fusion:                        RS/6000 and PowerPC Options.
51328                                                             (line  236)
51329* mpower8-vector:                        RS/6000 and PowerPC Options.
51330                                                             (line  242)
51331* mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
51332                                                             (line   27)
51333* mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
51334                                                             (line   27)
51335* mpowerpc64:                            RS/6000 and PowerPC Options.
51336                                                             (line   27)
51337* mprefer-avx128:                        i386 and x86-64 Options.
51338                                                             (line  614)
51339* mprefer-short-insn-regs:               Adapteva Epiphany Options.
51340                                                             (line   13)
51341* mprefergot:                            SH Options.         (line  292)
51342* mpreferred-stack-boundary:             i386 and x86-64 Options.
51343                                                             (line  471)
51344* mpretend-cmove:                        SH Options.         (line  517)
51345* mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
51346                                                             (line  522)
51347* mprolog-function:                      V850 Options.       (line   23)
51348* mprologue-epilogue:                    CRIS Options.       (line   71)
51349* mprototype:                            RS/6000 and PowerPC Options.
51350                                                             (line  647)
51351* mpt-fixed:                             SH Options.         (line  435)
51352* mpush-args:                            i386 and x86-64 Options.
51353                                                             (line  737)
51354* MQ:                                    Preprocessor Options.
51355                                                             (line  265)
51356* mquad-memory:                          RS/6000 and PowerPC Options.
51357                                                             (line  249)
51358* mquad-memory-atomic:                   RS/6000 and PowerPC Options.
51359                                                             (line  255)
51360* mr10k-cache-barrier:                   MIPS Options.       (line  564)
51361* mrecip <1>:                            RS/6000 and PowerPC Options.
51362                                                             (line  804)
51363* mrecip:                                i386 and x86-64 Options.
51364                                                             (line  647)
51365* mrecip-precision:                      RS/6000 and PowerPC Options.
51366                                                             (line  840)
51367* mrecip=opt <1>:                        RS/6000 and PowerPC Options.
51368                                                             (line  817)
51369* mrecip=opt:                            i386 and x86-64 Options.
51370                                                             (line  669)
51371* mregister-names:                       IA-64 Options.      (line   37)
51372* mregnames:                             RS/6000 and PowerPC Options.
51373                                                             (line  753)
51374* mregparm:                              i386 and x86-64 Options.
51375                                                             (line  408)
51376* mrelax <1>:                            V850 Options.       (line  103)
51377* mrelax <2>:                            SH Options.         (line  158)
51378* mrelax <3>:                            RX Options.         (line   95)
51379* mrelax <4>:                            MN10300 Options.    (line   46)
51380* mrelax <5>:                            H8/300 Options.     (line    9)
51381* mrelax:                                AVR Options.        (line  169)
51382* mrelax-immediate:                      MCore Options.      (line   19)
51383* mrelax-pic-calls:                      MIPS Options.       (line  689)
51384* mrelocatable:                          RS/6000 and PowerPC Options.
51385                                                             (line  473)
51386* mrelocatable-lib:                      RS/6000 and PowerPC Options.
51387                                                             (line  484)
51388* mrenesas:                              SH Options.         (line  173)
51389* mrepeat:                               MeP Options.        (line   96)
51390* mreturn-pointer-on-d0:                 MN10300 Options.    (line   36)
51391* mrh850-abi:                            V850 Options.       (line  127)
51392* mrtd <1>:                              Function Attributes.
51393                                                             (line  177)
51394* mrtd <2>:                              M680x0 Options.     (line  240)
51395* mrtd:                                  i386 and x86-64 Options.
51396                                                             (line  384)
51397* mrtp:                                  VxWorks Options.    (line   11)
51398* ms <1>:                                MeP Options.        (line  100)
51399* ms:                                    H8/300 Options.     (line   17)
51400* ms2600:                                H8/300 Options.     (line   24)
51401* msafe-dma:                             SPU Options.        (line   17)
51402* msafe-hints:                           SPU Options.        (line  107)
51403* msahf:                                 i386 and x86-64 Options.
51404                                                             (line  627)
51405* msatur:                                MeP Options.        (line  105)
51406* msave-acc-in-interrupts:               RX Options.         (line  109)
51407* msave-toc-indirect:                    RS/6000 and PowerPC Options.
51408                                                             (line  888)
51409* mscc:                                  FRV Options.        (line  140)
51410* msched-ar-data-spec:                   IA-64 Options.      (line  134)
51411* msched-ar-in-data-spec:                IA-64 Options.      (line  155)
51412* msched-br-data-spec:                   IA-64 Options.      (line  128)
51413* msched-br-in-data-spec:                IA-64 Options.      (line  148)
51414* msched-control-spec:                   IA-64 Options.      (line  140)
51415* msched-costly-dep:                     RS/6000 and PowerPC Options.
51416                                                             (line  529)
51417* msched-count-spec-in-critical-path:    IA-64 Options.      (line  182)
51418* msched-fp-mem-deps-zero-cost:          IA-64 Options.      (line  198)
51419* msched-in-control-spec:                IA-64 Options.      (line  162)
51420* msched-max-memory-insns:               IA-64 Options.      (line  207)
51421* msched-max-memory-insns-hard-limit:    IA-64 Options.      (line  213)
51422* msched-prefer-non-control-spec-insns:  IA-64 Options.      (line  175)
51423* msched-prefer-non-data-spec-insns:     IA-64 Options.      (line  168)
51424* msched-spec-ldc:                       IA-64 Options.      (line  187)
51425* msched-stop-bits-after-every-cycle:    IA-64 Options.      (line  194)
51426* mschedule:                             HPPA Options.       (line   77)
51427* mscore5:                               Score Options.      (line   25)
51428* mscore5u:                              Score Options.      (line   28)
51429* mscore7:                               Score Options.      (line   31)
51430* mscore7d:                              Score Options.      (line   34)
51431* msda:                                  V850 Options.       (line   40)
51432* msdata <1>:                            RS/6000 and PowerPC Options.
51433                                                             (line  721)
51434* msdata:                                IA-64 Options.      (line   42)
51435* msdata=all:                            C6X Options.        (line   30)
51436* msdata=data:                           RS/6000 and PowerPC Options.
51437                                                             (line  726)
51438* msdata=default <1>:                    RS/6000 and PowerPC Options.
51439                                                             (line  721)
51440* msdata=default:                        C6X Options.        (line   22)
51441* msdata=eabi:                           RS/6000 and PowerPC Options.
51442                                                             (line  701)
51443* msdata=none <1>:                       RS/6000 and PowerPC Options.
51444                                                             (line  734)
51445* msdata=none <2>:                       M32R/D Options.     (line   40)
51446* msdata=none:                           C6X Options.        (line   35)
51447* msdata=sdata:                          M32R/D Options.     (line   49)
51448* msdata=sysv:                           RS/6000 and PowerPC Options.
51449                                                             (line  712)
51450* msdata=use:                            M32R/D Options.     (line   53)
51451* msdram <1>:                            MeP Options.        (line  110)
51452* msdram:                                Blackfin Options.   (line  172)
51453* msecure-plt:                           RS/6000 and PowerPC Options.
51454                                                             (line  184)
51455* msel-sched-dont-check-control-spec:    IA-64 Options.      (line  203)
51456* msep-data:                             Blackfin Options.   (line  110)
51457* mserialize-volatile:                   Xtensa Options.     (line   35)
51458* msetlb:                                MN10300 Options.    (line   64)
51459* mshared-library-id:                    Blackfin Options.   (line  103)
51460* mshort:                                M680x0 Options.     (line  220)
51461* msign-extend-enabled:                  LM32 Options.       (line   18)
51462* msim <1>:                              Xstormy16 Options.  (line    9)
51463* msim <2>:                              RX Options.         (line   71)
51464* msim <3>:                              RS/6000 and PowerPC Options.
51465                                                             (line  657)
51466* msim <4>:                              RL78 Options.       (line    7)
51467* msim <5>:                              MeP Options.        (line  114)
51468* msim <6>:                              M32C Options.       (line   13)
51469* msim <7>:                              CR16 Options.       (line   18)
51470* msim <8>:                              C6X Options.        (line   19)
51471* msim:                                  Blackfin Options.   (line   37)
51472* msimnovec:                             MeP Options.        (line  117)
51473* msimple-fpu:                           RS/6000 and PowerPC Options.
51474                                                             (line  377)
51475* msingle-exit:                          MMIX Options.       (line   66)
51476* msingle-float <1>:                     RS/6000 and PowerPC Options.
51477                                                             (line  373)
51478* msingle-float:                         MIPS Options.       (line  244)
51479* msingle-pic-base <1>:                  RS/6000 and PowerPC Options.
51480                                                             (line  516)
51481* msingle-pic-base:                      ARM Options.        (line  213)
51482* msio:                                  HPPA Options.       (line  104)
51483* mslow-bytes:                           MCore Options.      (line   35)
51484* msmall-data:                           DEC Alpha Options.  (line  187)
51485* msmall-data-limit:                     RX Options.         (line   47)
51486* msmall-divides:                        MicroBlaze Options. (line   39)
51487* msmall-exec:                           S/390 and zSeries Options.
51488                                                             (line   80)
51489* msmall-mem:                            SPU Options.        (line   35)
51490* msmall-model:                          FR30 Options.       (line    9)
51491* msmall-text:                           DEC Alpha Options.  (line  205)
51492* msmall16:                              Adapteva Epiphany Options.
51493                                                             (line   67)
51494* msmartmips:                            MIPS Options.       (line  280)
51495* msoft-float <1>:                       V850 Options.       (line  113)
51496* msoft-float <2>:                       SPARC Options.      (line   40)
51497* msoft-float <3>:                       S/390 and zSeries Options.
51498                                                             (line   11)
51499* msoft-float <4>:                       RS/6000 and PowerPC Options.
51500                                                             (line  367)
51501* msoft-float <5>:                       PDP-11 Options.     (line   13)
51502* msoft-float <6>:                       MIPS Options.       (line  230)
51503* msoft-float <7>:                       MicroBlaze Options. (line    7)
51504* msoft-float <8>:                       M680x0 Options.     (line  203)
51505* msoft-float <9>:                       i386 and x86-64 Options.
51506                                                             (line  292)
51507* msoft-float <10>:                      HPPA Options.       (line   90)
51508* msoft-float <11>:                      FRV Options.        (line   22)
51509* msoft-float:                           DEC Alpha Options.  (line   10)
51510* msoft-quad-float:                      SPARC Options.      (line   60)
51511* msp8:                                  AVR Options.        (line  183)
51512* mspace:                                V850 Options.       (line   30)
51513* mspe:                                  RS/6000 and PowerPC Options.
51514                                                             (line  204)
51515* mspecld-anomaly:                       Blackfin Options.   (line   51)
51516* msplit-addresses:                      MIPS Options.       (line  426)
51517* msplit-vecmove-early:                  Adapteva Epiphany Options.
51518                                                             (line  127)
51519* msse:                                  i386 and x86-64 Options.
51520                                                             (line  571)
51521* msse2avx:                              i386 and x86-64 Options.
51522                                                             (line  812)
51523* msseregparm:                           i386 and x86-64 Options.
51524                                                             (line  419)
51525* mstack-align:                          CRIS Options.       (line   55)
51526* mstack-bias:                           SPARC Options.      (line  314)
51527* mstack-check-l1:                       Blackfin Options.   (line   77)
51528* mstack-guard:                          S/390 and zSeries Options.
51529                                                             (line  156)
51530* mstack-increment:                      MCore Options.      (line   50)
51531* mstack-offset:                         Adapteva Epiphany Options.
51532                                                             (line   37)
51533* mstack-size:                           S/390 and zSeries Options.
51534                                                             (line  156)
51535* mstackrealign:                         i386 and x86-64 Options.
51536                                                             (line  462)
51537* mstdmain:                              SPU Options.        (line   40)
51538* mstrict-align <1>:                     RS/6000 and PowerPC Options.
51539                                                             (line  468)
51540* mstrict-align <2>:                     M680x0 Options.     (line  287)
51541* mstrict-align:                         AArch64 Options.    (line   38)
51542* mstrict-X:                             AVR Options.        (line  196)
51543* mstring:                               RS/6000 and PowerPC Options.
51544                                                             (line  404)
51545* mstringop-strategy=ALG:                i386 and x86-64 Options.
51546                                                             (line  776)
51547* mstructure-size-boundary:              ARM Options.        (line  170)
51548* msvr4-struct-return:                   RS/6000 and PowerPC Options.
51549                                                             (line  609)
51550* msym32:                                MIPS Options.       (line  323)
51551* msynci:                                MIPS Options.       (line  674)
51552* MT:                                    Preprocessor Options.
51553                                                             (line  251)
51554* mtarget-align:                         Xtensa Options.     (line   59)
51555* mtas:                                  SH Options.         (line  283)
51556* mtda:                                  V850 Options.       (line   34)
51557* mtext-section-literals:                Xtensa Options.     (line   47)
51558* mtf:                                   MeP Options.        (line  121)
51559* mthread:                               i386 and x86-64 Windows Options.
51560                                                             (line   26)
51561* mthreads:                              i386 and x86-64 Options.
51562                                                             (line  752)
51563* mthumb:                                ARM Options.        (line  248)
51564* mthumb-interwork:                      ARM Options.        (line   25)
51565* mtiny-stack:                           AVR Options.        (line  210)
51566* mtiny=:                                MeP Options.        (line  125)
51567* mtls:                                  FRV Options.        (line   75)
51568* mTLS:                                  FRV Options.        (line   72)
51569* mtls-dialect <1>:                      i386 and x86-64 Options.
51570                                                             (line  730)
51571* mtls-dialect:                          ARM Options.        (line  289)
51572* mtls-dialect=desc:                     AArch64 Options.    (line   47)
51573* mtls-dialect=traditional:              AArch64 Options.    (line   51)
51574* mtls-direct-seg-refs:                  i386 and x86-64 Options.
51575                                                             (line  802)
51576* mtls-markers:                          RS/6000 and PowerPC Options.
51577                                                             (line  792)
51578* mtls-size:                             IA-64 Options.      (line  112)
51579* mtoc:                                  RS/6000 and PowerPC Options.
51580                                                             (line  493)
51581* mtomcat-stats:                         FRV Options.        (line  209)
51582* mtoplevel-symbols:                     MMIX Options.       (line   40)
51583* mtp:                                   ARM Options.        (line  281)
51584* mtpcs-frame:                           ARM Options.        (line  254)
51585* mtpcs-leaf-frame:                      ARM Options.        (line  260)
51586* mtpf-trace:                            S/390 and zSeries Options.
51587                                                             (line  131)
51588* mtrap-precision:                       DEC Alpha Options.  (line  109)
51589* mtune <1>:                             SPARC Options.      (line  181)
51590* mtune <2>:                             S/390 and zSeries Options.
51591                                                             (line  124)
51592* mtune <3>:                             RS/6000 and PowerPC Options.
51593                                                             (line  114)
51594* mtune <4>:                             MN10300 Options.    (line   30)
51595* mtune <5>:                             MIPS Options.       (line   63)
51596* mtune <6>:                             M680x0 Options.     (line   70)
51597* mtune <7>:                             IA-64 Options.      (line  116)
51598* mtune <8>:                             i386 and x86-64 Options.
51599                                                             (line  195)
51600* mtune <9>:                             DEC Alpha Options.  (line  259)
51601* mtune <10>:                            CRIS Options.       (line   16)
51602* mtune <11>:                            ARM Options.        (line   90)
51603* mtune:                                 AArch64 Options.    (line   89)
51604* muclibc:                               GNU/Linux Options.  (line   13)
51605* muls:                                  Score Options.      (line   18)
51606* multcost=NUMBER:                       SH Options.         (line  306)
51607* multi_module:                          Darwin Options.     (line  196)
51608* multilib-library-pic:                  FRV Options.        (line   89)
51609* multiply-enabled:                      LM32 Options.       (line   15)
51610* multiply_defined:                      Darwin Options.     (line  196)
51611* multiply_defined_unused:               Darwin Options.     (line  196)
51612* munaligned-access:                     ARM Options.        (line  313)
51613* munaligned-doubles:                    SPARC Options.      (line   74)
51614* municode:                              i386 and x86-64 Windows Options.
51615                                                             (line   30)
51616* muninit-const-in-rodata:               MIPS Options.       (line  396)
51617* munix:                                 VAX Options.        (line    9)
51618* munix-asm:                             PDP-11 Options.     (line   68)
51619* munsafe-dma:                           SPU Options.        (line   17)
51620* mupdate:                               RS/6000 and PowerPC Options.
51621                                                             (line  415)
51622* muser-enabled:                         LM32 Options.       (line   21)
51623* muser-mode:                            SPARC Options.      (line   86)
51624* musermode:                             SH Options.         (line  298)
51625* mv850:                                 V850 Options.       (line   49)
51626* mv850e:                                V850 Options.       (line   79)
51627* mv850e1:                               V850 Options.       (line   70)
51628* mv850e2:                               V850 Options.       (line   66)
51629* mv850e2v3:                             V850 Options.       (line   61)
51630* mv850e2v4:                             V850 Options.       (line   57)
51631* mv850e3v5:                             V850 Options.       (line   52)
51632* mv850es:                               V850 Options.       (line   75)
51633* mv8plus:                               SPARC Options.      (line  195)
51634* mveclibabi <1>:                        RS/6000 and PowerPC Options.
51635                                                             (line  849)
51636* mveclibabi:                            i386 and x86-64 Options.
51637                                                             (line  698)
51638* mvect8-ret-in-mem:                     i386 and x86-64 Options.
51639                                                             (line  429)
51640* mvis:                                  SPARC Options.      (line  202)
51641* mvis2:                                 SPARC Options.      (line  208)
51642* mvis3:                                 SPARC Options.      (line  216)
51643* mvliw-branch:                          FRV Options.        (line  164)
51644* mvms-return-codes:                     VMS Options.        (line    9)
51645* mvolatile-asm-stop:                    IA-64 Options.      (line   32)
51646* mvr4130-align:                         MIPS Options.       (line  663)
51647* mvrsave:                               RS/6000 and PowerPC Options.
51648                                                             (line  174)
51649* mvsx:                                  RS/6000 and PowerPC Options.
51650                                                             (line  218)
51651* mvxworks:                              RS/6000 and PowerPC Options.
51652                                                             (line  678)
51653* mvzeroupper:                           i386 and x86-64 Options.
51654                                                             (line  608)
51655* mwarn-cell-microcode:                  RS/6000 and PowerPC Options.
51656                                                             (line  180)
51657* mwarn-dynamicstack:                    S/390 and zSeries Options.
51658                                                             (line  150)
51659* mwarn-framesize:                       S/390 and zSeries Options.
51660                                                             (line  142)
51661* mwarn-multiple-fast-interrupts:        RX Options.         (line  143)
51662* mwarn-reloc:                           SPU Options.        (line   10)
51663* mwide-bitfields:                       MCore Options.      (line   23)
51664* mwin32:                                i386 and x86-64 Windows Options.
51665                                                             (line   35)
51666* mwindows:                              i386 and x86-64 Windows Options.
51667                                                             (line   41)
51668* mword-relocations:                     ARM Options.        (line  300)
51669* mwords-little-endian:                  ARM Options.        (line   66)
51670* mx32:                                  i386 and x86-64 Options.
51671                                                             (line  841)
51672* mxgot <1>:                             MIPS Options.       (line  192)
51673* mxgot:                                 M680x0 Options.     (line  319)
51674* mxilinx-fpu:                           RS/6000 and PowerPC Options.
51675                                                             (line  388)
51676* mxl-barrel-shift:                      MicroBlaze Options. (line   33)
51677* mxl-compat:                            RS/6000 and PowerPC Options.
51678                                                             (line  324)
51679* mxl-float-convert:                     MicroBlaze Options. (line   51)
51680* mxl-float-sqrt:                        MicroBlaze Options. (line   54)
51681* mxl-gp-opt:                            MicroBlaze Options. (line   45)
51682* mxl-multiply-high:                     MicroBlaze Options. (line   48)
51683* mxl-pattern-compare:                   MicroBlaze Options. (line   36)
51684* mxl-reorder:                           MicroBlaze Options. (line   63)
51685* mxl-soft-div:                          MicroBlaze Options. (line   30)
51686* mxl-soft-mul:                          MicroBlaze Options. (line   27)
51687* mxl-stack-check:                       MicroBlaze Options. (line   42)
51688* myellowknife:                          RS/6000 and PowerPC Options.
51689                                                             (line  673)
51690* mzarch:                                S/390 and zSeries Options.
51691                                                             (line   95)
51692* mzda:                                  V850 Options.       (line   45)
51693* mzdcbranch:                            SH Options.         (line  474)
51694* mzero-extend:                          MMIX Options.       (line   27)
51695* no-canonical-prefixes:                 Overall Options.    (line  334)
51696* no-integrated-cpp:                     Preprocessor Options.
51697                                                             (line   34)
51698* no-sysroot-suffix:                     Directory Options.  (line  112)
51699* no_dead_strip_inits_and_terms:         Darwin Options.     (line  196)
51700* noall_load:                            Darwin Options.     (line  196)
51701* nocpp:                                 MIPS Options.       (line  494)
51702* nodefaultlibs:                         Link Options.       (line   62)
51703* nofixprebinding:                       Darwin Options.     (line  196)
51704* nofpu:                                 RX Options.         (line   17)
51705* nolibdld:                              HPPA Options.       (line  187)
51706* nomultidefs:                           Darwin Options.     (line  196)
51707* non-static:                            VxWorks Options.    (line   16)
51708* noprebind:                             Darwin Options.     (line  196)
51709* noseglinkedit:                         Darwin Options.     (line  196)
51710* nostartfiles:                          Link Options.       (line   57)
51711* nostdinc:                              Preprocessor Options.
51712                                                             (line  399)
51713* nostdinc++ <1>:                        Preprocessor Options.
51714                                                             (line  404)
51715* nostdinc++:                            C++ Dialect Options.
51716                                                             (line  348)
51717* nostdlib:                              Link Options.       (line   74)
51718* o:                                     Preprocessor Options.
51719                                                             (line   87)
51720* O:                                     Optimize Options.   (line   39)
51721* o:                                     Overall Options.    (line  192)
51722* O0:                                    Optimize Options.   (line  128)
51723* O1:                                    Optimize Options.   (line   39)
51724* O2:                                    Optimize Options.   (line   83)
51725* O3:                                    Optimize Options.   (line  121)
51726* Ofast:                                 Optimize Options.   (line  142)
51727* Og:                                    Optimize Options.   (line  149)
51728* Os:                                    Optimize Options.   (line  132)
51729* P:                                     Preprocessor Options.
51730                                                             (line  649)
51731* p:                                     Debugging Options.  (line  328)
51732* pagezero_size:                         Darwin Options.     (line  196)
51733* param:                                 Optimize Options.   (line 2240)
51734* pass-exit-codes:                       Overall Options.    (line  150)
51735* pedantic <1>:                          Warnings and Errors.
51736                                                             (line   25)
51737* pedantic <2>:                          Alternate Keywords. (line   30)
51738* pedantic <3>:                          C Extensions.       (line    6)
51739* pedantic <4>:                          Preprocessor Options.
51740                                                             (line  175)
51741* pedantic <5>:                          Warning Options.    (line   73)
51742* pedantic:                              Standards.          (line   16)
51743* pedantic-errors <1>:                   Warnings and Errors.
51744                                                             (line   25)
51745* pedantic-errors <2>:                   Non-bugs.           (line  216)
51746* pedantic-errors <3>:                   Preprocessor Options.
51747                                                             (line  180)
51748* pedantic-errors <4>:                   Warning Options.    (line  115)
51749* pedantic-errors:                       Standards.          (line   16)
51750* pg:                                    Debugging Options.  (line  334)
51751* pie:                                   Link Options.       (line   99)
51752* pipe:                                  Overall Options.    (line  215)
51753* prebind:                               Darwin Options.     (line  196)
51754* prebind_all_twolevel_modules:          Darwin Options.     (line  196)
51755* print-file-name:                       Debugging Options.  (line 1313)
51756* print-libgcc-file-name:                Debugging Options.  (line 1347)
51757* print-multi-directory:                 Debugging Options.  (line 1319)
51758* print-multi-lib:                       Debugging Options.  (line 1324)
51759* print-multi-os-directory:              Debugging Options.  (line 1331)
51760* print-multiarch:                       Debugging Options.  (line 1340)
51761* print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
51762                                                             (line  203)
51763* print-prog-name:                       Debugging Options.  (line 1344)
51764* print-search-dirs:                     Debugging Options.  (line 1355)
51765* print-sysroot:                         Debugging Options.  (line 1368)
51766* print-sysroot-headers-suffix:          Debugging Options.  (line 1375)
51767* private_bundle:                        Darwin Options.     (line  196)
51768* pthread <1>:                           Solaris 2 Options.  (line   31)
51769* pthread:                               RS/6000 and PowerPC Options.
51770                                                             (line  799)
51771* pthreads:                              Solaris 2 Options.  (line   25)
51772* Q:                                     Debugging Options.  (line  340)
51773* Qn:                                    System V Options.   (line   18)
51774* Qy:                                    System V Options.   (line   14)
51775* rdynamic:                              Link Options.       (line  105)
51776* read_only_relocs:                      Darwin Options.     (line  196)
51777* remap:                                 Preprocessor Options.
51778                                                             (line  697)
51779* s:                                     Link Options.       (line  112)
51780* S <1>:                                 Link Options.       (line   20)
51781* S:                                     Overall Options.    (line  175)
51782* save-temps:                            Debugging Options.  (line 1222)
51783* save-temps=obj:                        Debugging Options.  (line 1248)
51784* sectalign:                             Darwin Options.     (line  196)
51785* sectcreate:                            Darwin Options.     (line  196)
51786* sectobjectsymbols:                     Darwin Options.     (line  196)
51787* sectorder:                             Darwin Options.     (line  196)
51788* seg1addr:                              Darwin Options.     (line  196)
51789* seg_addr_table:                        Darwin Options.     (line  196)
51790* seg_addr_table_filename:               Darwin Options.     (line  196)
51791* segaddr:                               Darwin Options.     (line  196)
51792* seglinkedit:                           Darwin Options.     (line  196)
51793* segprot:                               Darwin Options.     (line  196)
51794* segs_read_only_addr:                   Darwin Options.     (line  196)
51795* segs_read_write_addr:                  Darwin Options.     (line  196)
51796* shared:                                Link Options.       (line  121)
51797* shared-libgcc:                         Link Options.       (line  129)
51798* short-calls:                           Adapteva Epiphany Options.
51799                                                             (line   61)
51800* sim:                                   CRIS Options.       (line   95)
51801* sim2:                                  CRIS Options.       (line  101)
51802* single_module:                         Darwin Options.     (line  196)
51803* specs:                                 Directory Options.  (line   89)
51804* static <1>:                            HPPA Options.       (line  191)
51805* static <2>:                            Darwin Options.     (line  196)
51806* static:                                Link Options.       (line  116)
51807* static-libgcc:                         Link Options.       (line  129)
51808* std <1>:                               Non-bugs.           (line  107)
51809* std <2>:                               Other Builtins.     (line   22)
51810* std <3>:                               C Dialect Options.  (line   47)
51811* std:                                   Standards.          (line   16)
51812* std=:                                  Preprocessor Options.
51813                                                             (line  338)
51814* sub_library:                           Darwin Options.     (line  196)
51815* sub_umbrella:                          Darwin Options.     (line  196)
51816* symbolic:                              Link Options.       (line  193)
51817* sysroot:                               Directory Options.  (line   97)
51818* T:                                     Link Options.       (line  199)
51819* target-help <1>:                       Preprocessor Options.
51820                                                             (line  702)
51821* target-help:                           Overall Options.    (line  230)
51822* threads:                               HPPA Options.       (line  204)
51823* time:                                  Debugging Options.  (line 1263)
51824* tno-android-cc:                        GNU/Linux Options.  (line   31)
51825* tno-android-ld:                        GNU/Linux Options.  (line   35)
51826* traditional <1>:                       Incompatibilities.  (line    6)
51827* traditional:                           C Dialect Options.  (line  309)
51828* traditional-cpp <1>:                   Preprocessor Options.
51829                                                             (line  680)
51830* traditional-cpp:                       C Dialect Options.  (line  309)
51831* trigraphs <1>:                         Preprocessor Options.
51832                                                             (line  684)
51833* trigraphs:                             C Dialect Options.  (line  304)
51834* twolevel_namespace:                    Darwin Options.     (line  196)
51835* u:                                     Link Options.       (line  231)
51836* U:                                     Preprocessor Options.
51837                                                             (line   69)
51838* umbrella:                              Darwin Options.     (line  196)
51839* undef:                                 Preprocessor Options.
51840                                                             (line   73)
51841* undefined:                             Darwin Options.     (line  196)
51842* unexported_symbols_list:               Darwin Options.     (line  196)
51843* v <1>:                                 Preprocessor Options.
51844                                                             (line  706)
51845* v:                                     Overall Options.    (line  203)
51846* version <1>:                           Preprocessor Options.
51847                                                             (line  719)
51848* version:                               Overall Options.    (line  338)
51849* W:                                     Incompatibilities.  (line   64)
51850* w:                                     Preprocessor Options.
51851                                                             (line  171)
51852* W:                                     Warning Options.    (line  168)
51853* w:                                     Warning Options.    (line   25)
51854* Wa:                                    Assembler Options.  (line    9)
51855* Wabi:                                  C++ Dialect Options.
51856                                                             (line  362)
51857* Waddr-space-convert:                   AVR Options.        (line  213)
51858* Waddress:                              Warning Options.    (line 1177)
51859* Waggregate-return:                     Warning Options.    (line 1195)
51860* Waggressive-loop-optimizations:        Warning Options.    (line 1200)
51861* Wall <1>:                              Standard Libraries. (line    6)
51862* Wall <2>:                              Preprocessor Options.
51863                                                             (line   93)
51864* Wall:                                  Warning Options.    (line  119)
51865* Warray-bounds:                         Warning Options.    (line  833)
51866* Wassign-intercept:                     Objective-C and Objective-C++ Dialect Options.
51867                                                             (line  157)
51868* Wattributes:                           Warning Options.    (line 1205)
51869* Wbad-function-cast:                    Warning Options.    (line 1051)
51870* Wbuiltin-macro-redefined:              Warning Options.    (line 1211)
51871* Wcast-align:                           Warning Options.    (line 1082)
51872* Wcast-qual:                            Warning Options.    (line 1066)
51873* Wchar-subscripts:                      Warning Options.    (line  207)
51874* Wclobbered:                            Warning Options.    (line 1102)
51875* Wcomment <1>:                          Preprocessor Options.
51876                                                             (line  101)
51877* Wcomment:                              Warning Options.    (line  212)
51878* Wcomments:                             Preprocessor Options.
51879                                                             (line  101)
51880* Wconversion:                           Warning Options.    (line 1106)
51881* Wconversion-null:                      Warning Options.    (line 1124)
51882* Wctor-dtor-privacy:                    C++ Dialect Options.
51883                                                             (line  472)
51884* Wdeclaration-after-statement:          Warning Options.    (line  966)
51885* Wdelete-non-virtual-dtor:              C++ Dialect Options.
51886                                                             (line  479)
51887* Wdeprecated:                           Warning Options.    (line 1326)
51888* Wdeprecated-declarations:              Warning Options.    (line 1330)
51889* Wdisabled-optimization:                Warning Options.    (line 1486)
51890* Wdiv-by-zero:                          Warning Options.    (line  838)
51891* Wdouble-promotion:                     Warning Options.    (line  236)
51892* weak_reference_mismatches:             Darwin Options.     (line  196)
51893* Weffc++:                               C++ Dialect Options.
51894                                                             (line  558)
51895* Wempty-body:                           Warning Options.    (line 1135)
51896* Wendif-labels <1>:                     Preprocessor Options.
51897                                                             (line  148)
51898* Wendif-labels:                         Warning Options.    (line  976)
51899* Wenum-compare:                         Warning Options.    (line 1139)
51900* Werror <1>:                            Preprocessor Options.
51901                                                             (line  161)
51902* Werror:                                Warning Options.    (line   28)
51903* Werror=:                               Warning Options.    (line   31)
51904* Wextra:                                Warning Options.    (line  168)
51905* Wfatal-errors:                         Warning Options.    (line   48)
51906* Wfloat-equal:                          Warning Options.    (line  865)
51907* Wformat <1>:                           Function Attributes.
51908                                                             (line  419)
51909* Wformat:                               Warning Options.    (line  255)
51910* Wformat-contains-nul:                  Warning Options.    (line  292)
51911* Wformat-extra-args:                    Warning Options.    (line  296)
51912* Wformat-nonliteral <1>:                Function Attributes.
51913                                                             (line  485)
51914* Wformat-nonliteral:                    Warning Options.    (line  320)
51915* Wformat-security:                      Warning Options.    (line  325)
51916* Wformat-y2k:                           Warning Options.    (line  337)
51917* Wformat-zero-length:                   Warning Options.    (line  310)
51918* Wformat=:                              Warning Options.    (line  255)
51919* Wframe-larger-than:                    Warning Options.    (line  990)
51920* Wfree-nonheap-object:                  Warning Options.    (line  999)
51921* whatsloaded:                           Darwin Options.     (line  196)
51922* whyload:                               Darwin Options.     (line  196)
51923* Wignored-qualifiers:                   Warning Options.    (line  377)
51924* Wimplicit:                             Warning Options.    (line  373)
51925* Wimplicit-function-declaration:        Warning Options.    (line  367)
51926* Wimplicit-int:                         Warning Options.    (line  363)
51927* Winherited-variadic-ctor:              Warning Options.    (line 1396)
51928* Winit-self:                            Warning Options.    (line  348)
51929* Winline <1>:                           Inline.             (line   63)
51930* Winline:                               Warning Options.    (line 1401)
51931* Wint-to-pointer-cast:                  Warning Options.    (line 1428)
51932* Winvalid-offsetof:                     Warning Options.    (line 1414)
51933* Winvalid-pch:                          Warning Options.    (line 1437)
51934* Wjump-misses-init:                     Warning Options.    (line 1145)
51935* Wl:                                    Link Options.       (line  223)
51936* Wlarger-than-LEN:                      Warning Options.    (line  987)
51937* Wlarger-than=LEN:                      Warning Options.    (line  987)
51938* Wliteral-suffix:                       C++ Dialect Options.
51939                                                             (line  486)
51940* Wlogical-op:                           Warning Options.    (line 1190)
51941* Wlong-long:                            Warning Options.    (line 1441)
51942* Wmain:                                 Warning Options.    (line  388)
51943* Wmaybe-uninitialized:                  Warning Options.    (line  648)
51944* Wmissing-braces:                       Warning Options.    (line  395)
51945* Wmissing-declarations:                 Warning Options.    (line 1250)
51946* Wmissing-field-initializers:           Warning Options.    (line 1260)
51947* Wmissing-format-attribute:             Warning Options.    (line  812)
51948* Wmissing-include-dirs:                 Warning Options.    (line  406)
51949* Wmissing-parameter-type:               Warning Options.    (line 1232)
51950* Wmissing-prototypes:                   Warning Options.    (line 1240)
51951* Wmultichar:                            Warning Options.    (line 1278)
51952* Wnarrowing:                            C++ Dialect Options.
51953                                                             (line  507)
51954* Wnested-externs:                       Warning Options.    (line 1393)
51955* Wno-abi:                               C++ Dialect Options.
51956                                                             (line  362)
51957* Wno-address:                           Warning Options.    (line 1177)
51958* Wno-aggregate-return:                  Warning Options.    (line 1195)
51959* Wno-aggressive-loop-optimizations:     Warning Options.    (line 1200)
51960* Wno-all:                               Warning Options.    (line  119)
51961* Wno-array-bounds:                      Warning Options.    (line  833)
51962* Wno-assign-intercept:                  Objective-C and Objective-C++ Dialect Options.
51963                                                             (line  157)
51964* Wno-attributes:                        Warning Options.    (line 1205)
51965* Wno-bad-function-cast:                 Warning Options.    (line 1051)
51966* Wno-builtin-macro-redefined:           Warning Options.    (line 1211)
51967* Wno-cast-align:                        Warning Options.    (line 1082)
51968* Wno-cast-qual:                         Warning Options.    (line 1066)
51969* Wno-char-subscripts:                   Warning Options.    (line  207)
51970* Wno-clobbered:                         Warning Options.    (line 1102)
51971* Wno-comment:                           Warning Options.    (line  212)
51972* Wno-conversion:                        Warning Options.    (line 1106)
51973* Wno-conversion-null:                   Warning Options.    (line 1124)
51974* Wno-coverage-mismatch:                 Warning Options.    (line  217)
51975* Wno-ctor-dtor-privacy:                 C++ Dialect Options.
51976                                                             (line  472)
51977* Wno-declaration-after-statement:       Warning Options.    (line  966)
51978* Wno-delete-non-virtual-dtor:           C++ Dialect Options.
51979                                                             (line  479)
51980* Wno-deprecated:                        Warning Options.    (line 1326)
51981* Wno-deprecated-declarations:           Warning Options.    (line 1330)
51982* Wno-disabled-optimization:             Warning Options.    (line 1486)
51983* Wno-div-by-zero:                       Warning Options.    (line  838)
51984* Wno-double-promotion:                  Warning Options.    (line  236)
51985* Wno-effc++:                            C++ Dialect Options.
51986                                                             (line  558)
51987* Wno-empty-body:                        Warning Options.    (line 1135)
51988* Wno-endif-labels:                      Warning Options.    (line  976)
51989* Wno-enum-compare:                      Warning Options.    (line 1139)
51990* Wno-error:                             Warning Options.    (line   28)
51991* Wno-error=:                            Warning Options.    (line   31)
51992* Wno-extra:                             Warning Options.    (line  168)
51993* Wno-fatal-errors:                      Warning Options.    (line   48)
51994* Wno-float-equal:                       Warning Options.    (line  865)
51995* Wno-format:                            Warning Options.    (line  255)
51996* Wno-format-contains-nul:               Warning Options.    (line  292)
51997* Wno-format-extra-args:                 Warning Options.    (line  296)
51998* Wno-format-nonliteral:                 Warning Options.    (line  320)
51999* Wno-format-security:                   Warning Options.    (line  325)
52000* Wno-format-y2k:                        Warning Options.    (line  337)
52001* Wno-format-zero-length:                Warning Options.    (line  310)
52002* Wno-free-nonheap-object:               Warning Options.    (line  999)
52003* Wno-ignored-qualifiers:                Warning Options.    (line  377)
52004* Wno-implicit:                          Warning Options.    (line  373)
52005* Wno-implicit-function-declaration:     Warning Options.    (line  367)
52006* Wno-implicit-int:                      Warning Options.    (line  363)
52007* Wno-inherited-variadic-ctor:           Warning Options.    (line 1396)
52008* Wno-init-self:                         Warning Options.    (line  348)
52009* Wno-inline:                            Warning Options.    (line 1401)
52010* Wno-int-to-pointer-cast:               Warning Options.    (line 1428)
52011* Wno-invalid-offsetof:                  Warning Options.    (line 1414)
52012* Wno-invalid-pch:                       Warning Options.    (line 1437)
52013* Wno-jump-misses-init:                  Warning Options.    (line 1145)
52014* Wno-literal-suffix:                    C++ Dialect Options.
52015                                                             (line  486)
52016* Wno-logical-op:                        Warning Options.    (line 1190)
52017* Wno-long-long:                         Warning Options.    (line 1441)
52018* Wno-main:                              Warning Options.    (line  388)
52019* Wno-maybe-uninitialized:               Warning Options.    (line  648)
52020* Wno-missing-braces:                    Warning Options.    (line  395)
52021* Wno-missing-declarations:              Warning Options.    (line 1250)
52022* Wno-missing-field-initializers:        Warning Options.    (line 1260)
52023* Wno-missing-format-attribute:          Warning Options.    (line  812)
52024* Wno-missing-include-dirs:              Warning Options.    (line  406)
52025* Wno-missing-parameter-type:            Warning Options.    (line 1232)
52026* Wno-missing-prototypes:                Warning Options.    (line 1240)
52027* Wno-mudflap:                           Warning Options.    (line 1506)
52028* Wno-multichar:                         Warning Options.    (line 1278)
52029* Wno-narrowing:                         C++ Dialect Options.
52030                                                             (line  507)
52031* Wno-nested-externs:                    Warning Options.    (line 1393)
52032* Wno-noexcept:                          C++ Dialect Options.
52033                                                             (line  520)
52034* Wno-non-template-friend:               C++ Dialect Options.
52035                                                             (line  596)
52036* Wno-non-virtual-dtor:                  C++ Dialect Options.
52037                                                             (line  526)
52038* Wno-nonnull:                           Warning Options.    (line  341)
52039* Wno-old-style-cast:                    C++ Dialect Options.
52040                                                             (line  612)
52041* Wno-old-style-declaration:             Warning Options.    (line 1222)
52042* Wno-old-style-definition:              Warning Options.    (line 1228)
52043* Wno-overflow:                          Warning Options.    (line 1336)
52044* Wno-overlength-strings:                Warning Options.    (line 1510)
52045* Wno-overloaded-virtual:                C++ Dialect Options.
52046                                                             (line  618)
52047* Wno-override-init:                     Warning Options.    (line 1339)
52048* Wno-packed:                            Warning Options.    (line 1347)
52049* Wno-packed-bitfield-compat:            Warning Options.    (line 1364)
52050* Wno-padded:                            Warning Options.    (line 1381)
52051* Wno-parentheses:                       Warning Options.    (line  409)
52052* Wno-pedantic-ms-format:                Warning Options.    (line 1031)
52053* Wno-pmf-conversions <1>:               Bound member functions.
52054                                                             (line   35)
52055* Wno-pmf-conversions:                   C++ Dialect Options.
52056                                                             (line  637)
52057* Wno-pointer-arith:                     Warning Options.    (line 1037)
52058* Wno-pointer-sign:                      Warning Options.    (line 1495)
52059* Wno-pointer-to-int-cast:               Warning Options.    (line 1433)
52060* Wno-pragmas:                           Warning Options.    (line  698)
52061* Wno-protocol:                          Objective-C and Objective-C++ Dialect Options.
52062                                                             (line  161)
52063* Wno-redundant-decls:                   Warning Options.    (line 1388)
52064* Wno-reorder:                           C++ Dialect Options.
52065                                                             (line  533)
52066* Wno-return-local-addr:                 Warning Options.    (line  504)
52067* Wno-return-type:                       Warning Options.    (line  508)
52068* Wno-selector:                          Objective-C and Objective-C++ Dialect Options.
52069                                                             (line  171)
52070* Wno-sequence-point:                    Warning Options.    (line  458)
52071* Wno-shadow:                            Warning Options.    (line  980)
52072* Wno-sign-compare:                      Warning Options.    (line 1156)
52073* Wno-sign-conversion:                   Warning Options.    (line 1163)
52074* Wno-sign-promo:                        C++ Dialect Options.
52075                                                             (line  641)
52076* Wno-sizeof-pointer-memaccess:          Warning Options.    (line 1169)
52077* Wno-stack-protector:                   Warning Options.    (line 1501)
52078* Wno-strict-aliasing:                   Warning Options.    (line  703)
52079* Wno-strict-null-sentinel:              C++ Dialect Options.
52080                                                             (line  588)
52081* Wno-strict-overflow:                   Warning Options.    (line  743)
52082* Wno-strict-prototypes:                 Warning Options.    (line 1216)
52083* Wno-strict-selector-match:             Objective-C and Objective-C++ Dialect Options.
52084                                                             (line  183)
52085* Wno-suggest-attribute=:                Warning Options.    (line  793)
52086* Wno-suggest-attribute=const:           Warning Options.    (line  799)
52087* Wno-suggest-attribute=format:          Warning Options.    (line  812)
52088* Wno-suggest-attribute=noreturn:        Warning Options.    (line  799)
52089* Wno-suggest-attribute=pure:            Warning Options.    (line  799)
52090* Wno-switch:                            Warning Options.    (line  523)
52091* Wno-switch-default:                    Warning Options.    (line  531)
52092* Wno-switch-enum:                       Warning Options.    (line  534)
52093* Wno-sync-nand:                         Warning Options.    (line  543)
52094* Wno-system-headers:                    Warning Options.    (line  843)
52095* Wno-traditional:                       Warning Options.    (line  880)
52096* Wno-traditional-conversion:            Warning Options.    (line  958)
52097* Wno-trampolines:                       Warning Options.    (line  854)
52098* Wno-trigraphs:                         Warning Options.    (line  548)
52099* Wno-type-limits:                       Warning Options.    (line 1044)
52100* Wno-undeclared-selector:               Objective-C and Objective-C++ Dialect Options.
52101                                                             (line  191)
52102* Wno-undef:                             Warning Options.    (line  973)
52103* Wno-uninitialized:                     Warning Options.    (line  625)
52104* Wno-unknown-pragmas:                   Warning Options.    (line  691)
52105* Wno-unsafe-loop-optimizations:         Warning Options.    (line 1025)
52106* Wno-unused:                            Warning Options.    (line  618)
52107* Wno-unused-but-set-parameter:          Warning Options.    (line  553)
52108* Wno-unused-but-set-variable:           Warning Options.    (line  562)
52109* Wno-unused-function:                   Warning Options.    (line  572)
52110* Wno-unused-label:                      Warning Options.    (line  577)
52111* Wno-unused-parameter:                  Warning Options.    (line  588)
52112* Wno-unused-result:                     Warning Options.    (line  595)
52113* Wno-unused-value:                      Warning Options.    (line  608)
52114* Wno-unused-variable:                   Warning Options.    (line  600)
52115* Wno-useless-cast:                      Warning Options.    (line 1132)
52116* Wno-varargs:                           Warning Options.    (line 1452)
52117* Wno-variadic-macros:                   Warning Options.    (line 1446)
52118* Wno-vector-operation-performance:      Warning Options.    (line 1457)
52119* Wno-virtual-move-assign:               Warning Options.    (line 1467)
52120* Wno-vla:                               Warning Options.    (line 1476)
52121* Wno-volatile-register-var:             Warning Options.    (line 1480)
52122* Wno-write-strings:                     Warning Options.    (line 1088)
52123* Wno-zero-as-null-pointer-constant:     Warning Options.    (line 1128)
52124* Wnoexcept:                             C++ Dialect Options.
52125                                                             (line  520)
52126* Wnon-template-friend:                  C++ Dialect Options.
52127                                                             (line  596)
52128* Wnon-virtual-dtor:                     C++ Dialect Options.
52129                                                             (line  526)
52130* Wnonnull:                              Warning Options.    (line  341)
52131* Wnormalized=:                          Warning Options.    (line 1284)
52132* Wold-style-cast:                       C++ Dialect Options.
52133                                                             (line  612)
52134* Wold-style-declaration:                Warning Options.    (line 1222)
52135* Wold-style-definition:                 Warning Options.    (line 1228)
52136* Woverflow:                             Warning Options.    (line 1336)
52137* Woverlength-strings:                   Warning Options.    (line 1510)
52138* Woverloaded-virtual:                   C++ Dialect Options.
52139                                                             (line  618)
52140* Woverride-init:                        Warning Options.    (line 1339)
52141* Wp:                                    Preprocessor Options.
52142                                                             (line   14)
52143* Wpacked:                               Warning Options.    (line 1347)
52144* Wpacked-bitfield-compat:               Warning Options.    (line 1364)
52145* Wpadded:                               Warning Options.    (line 1381)
52146* Wparentheses:                          Warning Options.    (line  409)
52147* Wpedantic:                             Warning Options.    (line   73)
52148* Wpedantic-ms-format:                   Warning Options.    (line 1031)
52149* Wpmf-conversions:                      C++ Dialect Options.
52150                                                             (line  637)
52151* Wpointer-arith <1>:                    Pointer Arith.      (line   13)
52152* Wpointer-arith:                        Warning Options.    (line 1037)
52153* Wpointer-sign:                         Warning Options.    (line 1495)
52154* Wpointer-to-int-cast:                  Warning Options.    (line 1433)
52155* Wpragmas:                              Warning Options.    (line  698)
52156* Wprotocol:                             Objective-C and Objective-C++ Dialect Options.
52157                                                             (line  161)
52158* wrapper:                               Overall Options.    (line  341)
52159* Wredundant-decls:                      Warning Options.    (line 1388)
52160* Wreorder:                              C++ Dialect Options.
52161                                                             (line  533)
52162* Wreturn-local-addr:                    Warning Options.    (line  504)
52163* Wreturn-type:                          Warning Options.    (line  508)
52164* Wselector:                             Objective-C and Objective-C++ Dialect Options.
52165                                                             (line  171)
52166* Wsequence-point:                       Warning Options.    (line  458)
52167* Wshadow:                               Warning Options.    (line  980)
52168* Wsign-compare:                         Warning Options.    (line 1156)
52169* Wsign-conversion:                      Warning Options.    (line 1163)
52170* Wsign-promo:                           C++ Dialect Options.
52171                                                             (line  641)
52172* Wsizeof-pointer-memaccess:             Warning Options.    (line 1169)
52173* Wstack-protector:                      Warning Options.    (line 1501)
52174* Wstack-usage:                          Warning Options.    (line 1003)
52175* Wstrict-aliasing:                      Warning Options.    (line  703)
52176* Wstrict-aliasing=n:                    Warning Options.    (line  711)
52177* Wstrict-null-sentinel:                 C++ Dialect Options.
52178                                                             (line  588)
52179* Wstrict-overflow:                      Warning Options.    (line  743)
52180* Wstrict-prototypes:                    Warning Options.    (line 1216)
52181* Wstrict-selector-match:                Objective-C and Objective-C++ Dialect Options.
52182                                                             (line  183)
52183* Wsuggest-attribute=:                   Warning Options.    (line  793)
52184* Wsuggest-attribute=const:              Warning Options.    (line  799)
52185* Wsuggest-attribute=format:             Warning Options.    (line  812)
52186* Wsuggest-attribute=noreturn:           Warning Options.    (line  799)
52187* Wsuggest-attribute=pure:               Warning Options.    (line  799)
52188* Wswitch:                               Warning Options.    (line  523)
52189* Wswitch-default:                       Warning Options.    (line  531)
52190* Wswitch-enum:                          Warning Options.    (line  534)
52191* Wsync-nand:                            Warning Options.    (line  543)
52192* Wsystem-headers <1>:                   Preprocessor Options.
52193                                                             (line  165)
52194* Wsystem-headers:                       Warning Options.    (line  843)
52195* Wtraditional <1>:                      Preprocessor Options.
52196                                                             (line  118)
52197* Wtraditional:                          Warning Options.    (line  880)
52198* Wtraditional-conversion:               Warning Options.    (line  958)
52199* Wtrampolines:                          Warning Options.    (line  854)
52200* Wtrigraphs <1>:                        Preprocessor Options.
52201                                                             (line  106)
52202* Wtrigraphs:                            Warning Options.    (line  548)
52203* Wtype-limits:                          Warning Options.    (line 1044)
52204* Wundeclared-selector:                  Objective-C and Objective-C++ Dialect Options.
52205                                                             (line  191)
52206* Wundef <1>:                            Preprocessor Options.
52207                                                             (line  124)
52208* Wundef:                                Warning Options.    (line  973)
52209* Wuninitialized:                        Warning Options.    (line  625)
52210* Wunknown-pragmas:                      Warning Options.    (line  691)
52211* Wunsafe-loop-optimizations:            Warning Options.    (line 1025)
52212* Wunsuffixed-float-constants:           Warning Options.    (line 1525)
52213* Wunused:                               Warning Options.    (line  618)
52214* Wunused-but-set-parameter:             Warning Options.    (line  553)
52215* Wunused-but-set-variable:              Warning Options.    (line  562)
52216* Wunused-function:                      Warning Options.    (line  572)
52217* Wunused-label:                         Warning Options.    (line  577)
52218* Wunused-local-typedefs:                Warning Options.    (line  584)
52219* Wunused-macros:                        Preprocessor Options.
52220                                                             (line  129)
52221* Wunused-parameter:                     Warning Options.    (line  588)
52222* Wunused-result:                        Warning Options.    (line  595)
52223* Wunused-value:                         Warning Options.    (line  608)
52224* Wunused-variable:                      Warning Options.    (line  600)
52225* Wuseless-cast:                         Warning Options.    (line 1132)
52226* Wvarargs:                              Warning Options.    (line 1452)
52227* Wvariadic-macros:                      Warning Options.    (line 1446)
52228* Wvector-operation-performance:         Warning Options.    (line 1457)
52229* Wvirtual-move-assign:                  Warning Options.    (line 1467)
52230* Wvla:                                  Warning Options.    (line 1476)
52231* Wvolatile-register-var:                Warning Options.    (line 1480)
52232* Wwrite-strings:                        Warning Options.    (line 1088)
52233* Wzero-as-null-pointer-constant:        Warning Options.    (line 1128)
52234* x <1>:                                 Preprocessor Options.
52235                                                             (line  322)
52236* x:                                     Overall Options.    (line  126)
52237* Xassembler:                            Assembler Options.  (line   13)
52238* Xbind-lazy:                            VxWorks Options.    (line   26)
52239* Xbind-now:                             VxWorks Options.    (line   30)
52240* Xlinker:                               Link Options.       (line  205)
52241* Xpreprocessor:                         Preprocessor Options.
52242                                                             (line   25)
52243* Ym:                                    System V Options.   (line   26)
52244* YP:                                    System V Options.   (line   22)
52245
52246
52247File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
52248
52249Keyword Index
52250*************
52251
52252�[index�]
52253* Menu:
52254
52255* ! in constraint:                       Multi-Alternative.  (line   33)
52256* # in constraint:                       Modifiers.          (line   57)
52257* #pragma:                               Pragmas.            (line    6)
52258* #pragma implementation:                C++ Interface.      (line   39)
52259* #pragma implementation, implied:       C++ Interface.      (line   46)
52260* #pragma interface:                     C++ Interface.      (line   20)
52261* #pragma, reason for not using:         Function Attributes.
52262                                                             (line 1882)
52263* $:                                     Dollar Signs.       (line    6)
52264* % in constraint:                       Modifiers.          (line   45)
52265* %include:                              Spec Files.         (line   27)
52266* %include_noerr:                        Spec Files.         (line   31)
52267* %rename:                               Spec Files.         (line   35)
52268* & in constraint:                       Modifiers.          (line   25)
52269* ':                                     Incompatibilities.  (line  116)
52270* * in constraint:                       Modifiers.          (line   62)
52271* *__builtin_assume_aligned:             Other Builtins.     (line  339)
52272* + in constraint:                       Modifiers.          (line   12)
52273* -lgcc, use with -nodefaultlibs:        Link Options.       (line   85)
52274* -lgcc, use with -nostdlib:             Link Options.       (line   85)
52275* -march feature modifiers:              AArch64 Options.    (line   99)
52276* -mcpu feature modifiers:               AArch64 Options.    (line   99)
52277* -nodefaultlibs and unresolved references: Link Options.    (line   85)
52278* -nostdlib and unresolved references:   Link Options.       (line   85)
52279* .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
52280                                                             (line  745)
52281* //:                                    C++ Comments.       (line    6)
52282* 0 in constraint:                       Simple Constraints. (line  127)
52283* < in constraint:                       Simple Constraints. (line   48)
52284* = in constraint:                       Modifiers.          (line    8)
52285* > in constraint:                       Simple Constraints. (line   61)
52286* ? in constraint:                       Multi-Alternative.  (line   27)
52287* ?: extensions:                         Conditionals.       (line    6)
52288* ?: side effect:                        Conditionals.       (line   20)
52289* _ in variables in macros:              Typeof.             (line   46)
52290* __atomic_add_fetch:                    __atomic Builtins.  (line  169)
52291* __atomic_always_lock_free:             __atomic Builtins.  (line  247)
52292* __atomic_and_fetch:                    __atomic Builtins.  (line  173)
52293* __atomic_clear:                        __atomic Builtins.  (line  221)
52294* __atomic_compare_exchange:             __atomic Builtins.  (line  161)
52295* __atomic_compare_exchange_n:           __atomic Builtins.  (line  138)
52296* __atomic_exchange:                     __atomic Builtins.  (line  130)
52297* __atomic_exchange_n:                   __atomic Builtins.  (line  119)
52298* __atomic_fetch_add:                    __atomic Builtins.  (line  189)
52299* __atomic_fetch_and:                    __atomic Builtins.  (line  193)
52300* __atomic_fetch_nand:                   __atomic Builtins.  (line  199)
52301* __atomic_fetch_or:                     __atomic Builtins.  (line  197)
52302* __atomic_fetch_sub:                    __atomic Builtins.  (line  191)
52303* __atomic_fetch_xor:                    __atomic Builtins.  (line  195)
52304* __atomic_is_lock_free:                 __atomic Builtins.  (line  261)
52305* __atomic_load:                         __atomic Builtins.  (line   98)
52306* __atomic_load_n:                       __atomic Builtins.  (line   89)
52307* __atomic_nand_fetch:                   __atomic Builtins.  (line  179)
52308* __atomic_or_fetch:                     __atomic Builtins.  (line  177)
52309* __atomic_signal_fence:                 __atomic Builtins.  (line  239)
52310* __atomic_store:                        __atomic Builtins.  (line  113)
52311* __atomic_store_n:                      __atomic Builtins.  (line  104)
52312* __atomic_sub_fetch:                    __atomic Builtins.  (line  171)
52313* __atomic_test_and_set:                 __atomic Builtins.  (line  210)
52314* __atomic_thread_fence:                 __atomic Builtins.  (line  232)
52315* __atomic_xor_fetch:                    __atomic Builtins.  (line  175)
52316* __builtin___clear_cache:               Other Builtins.     (line  372)
52317* __builtin___fprintf_chk:               Object Size Checking.
52318                                                             (line    6)
52319* __builtin___memcpy_chk:                Object Size Checking.
52320                                                             (line    6)
52321* __builtin___memmove_chk:               Object Size Checking.
52322                                                             (line    6)
52323* __builtin___mempcpy_chk:               Object Size Checking.
52324                                                             (line    6)
52325* __builtin___memset_chk:                Object Size Checking.
52326                                                             (line    6)
52327* __builtin___printf_chk:                Object Size Checking.
52328                                                             (line    6)
52329* __builtin___snprintf_chk:              Object Size Checking.
52330                                                             (line    6)
52331* __builtin___sprintf_chk:               Object Size Checking.
52332                                                             (line    6)
52333* __builtin___stpcpy_chk:                Object Size Checking.
52334                                                             (line    6)
52335* __builtin___strcat_chk:                Object Size Checking.
52336                                                             (line    6)
52337* __builtin___strcpy_chk:                Object Size Checking.
52338                                                             (line    6)
52339* __builtin___strncat_chk:               Object Size Checking.
52340                                                             (line    6)
52341* __builtin___strncpy_chk:               Object Size Checking.
52342                                                             (line    6)
52343* __builtin___vfprintf_chk:              Object Size Checking.
52344                                                             (line    6)
52345* __builtin___vprintf_chk:               Object Size Checking.
52346                                                             (line    6)
52347* __builtin___vsnprintf_chk:             Object Size Checking.
52348                                                             (line    6)
52349* __builtin___vsprintf_chk:              Object Size Checking.
52350                                                             (line    6)
52351* __builtin_apply:                       Constructing Calls. (line   31)
52352* __builtin_apply_args:                  Constructing Calls. (line   20)
52353* __builtin_bswap16:                     Other Builtins.     (line  603)
52354* __builtin_bswap32:                     Other Builtins.     (line  607)
52355* __builtin_bswap64:                     Other Builtins.     (line  611)
52356* __builtin_choose_expr:                 Other Builtins.     (line  157)
52357* __builtin_clrsb:                       Other Builtins.     (line  532)
52358* __builtin_clrsbl:                      Other Builtins.     (line  555)
52359* __builtin_clrsbll:                     Other Builtins.     (line  578)
52360* __builtin_clz:                         Other Builtins.     (line  524)
52361* __builtin_clzl:                        Other Builtins.     (line  547)
52362* __builtin_clzll:                       Other Builtins.     (line  570)
52363* __builtin_complex:                     Other Builtins.     (line  197)
52364* __builtin_constant_p:                  Other Builtins.     (line  207)
52365* __builtin_cpu_init:                    X86 Built-in Functions.
52366                                                             (line   63)
52367* __builtin_cpu_is:                      X86 Built-in Functions.
52368                                                             (line   92)
52369* __builtin_cpu_supports:                X86 Built-in Functions.
52370                                                             (line  161)
52371* __builtin_ctz:                         Other Builtins.     (line  528)
52372* __builtin_ctzl:                        Other Builtins.     (line  551)
52373* __builtin_ctzll:                       Other Builtins.     (line  574)
52374* __builtin_expect:                      Other Builtins.     (line  257)
52375* __builtin_extract_return_addr:         Return Address.     (line   36)
52376* __builtin_ffs:                         Other Builtins.     (line  520)
52377* __builtin_ffsl:                        Other Builtins.     (line  543)
52378* __builtin_ffsll:                       Other Builtins.     (line  566)
52379* __builtin_FILE:                        Other Builtins.     (line  366)
52380* __builtin_fpclassify:                  Other Builtins.     (line    6)
52381* __builtin_frame_address:               Return Address.     (line   49)
52382* __builtin_frob_return_address:         Return Address.     (line   45)
52383* __builtin_FUNCTION:                    Other Builtins.     (line  361)
52384* __builtin_huge_val:                    Other Builtins.     (line  423)
52385* __builtin_huge_valf:                   Other Builtins.     (line  428)
52386* __builtin_huge_vall:                   Other Builtins.     (line  431)
52387* __builtin_huge_valq:                   X86 Built-in Functions.
52388                                                             (line   57)
52389* __builtin_inf:                         Other Builtins.     (line  446)
52390* __builtin_infd128:                     Other Builtins.     (line  456)
52391* __builtin_infd32:                      Other Builtins.     (line  450)
52392* __builtin_infd64:                      Other Builtins.     (line  453)
52393* __builtin_inff:                        Other Builtins.     (line  460)
52394* __builtin_infl:                        Other Builtins.     (line  465)
52395* __builtin_infq:                        X86 Built-in Functions.
52396                                                             (line   53)
52397* __builtin_isfinite:                    Other Builtins.     (line    6)
52398* __builtin_isgreater:                   Other Builtins.     (line    6)
52399* __builtin_isgreaterequal:              Other Builtins.     (line    6)
52400* __builtin_isinf_sign:                  Other Builtins.     (line    6)
52401* __builtin_isless:                      Other Builtins.     (line    6)
52402* __builtin_islessequal:                 Other Builtins.     (line    6)
52403* __builtin_islessgreater:               Other Builtins.     (line    6)
52404* __builtin_isnormal:                    Other Builtins.     (line    6)
52405* __builtin_isunordered:                 Other Builtins.     (line    6)
52406* __builtin_LINE:                        Other Builtins.     (line  356)
52407* __builtin_nan:                         Other Builtins.     (line  476)
52408* __builtin_nand128:                     Other Builtins.     (line  498)
52409* __builtin_nand32:                      Other Builtins.     (line  492)
52410* __builtin_nand64:                      Other Builtins.     (line  495)
52411* __builtin_nanf:                        Other Builtins.     (line  502)
52412* __builtin_nanl:                        Other Builtins.     (line  505)
52413* __builtin_nans:                        Other Builtins.     (line  509)
52414* __builtin_nansf:                       Other Builtins.     (line  513)
52415* __builtin_nansl:                       Other Builtins.     (line  516)
52416* __builtin_non_tx_store:                S/390 System z Built-in Functions.
52417                                                             (line  104)
52418* __builtin_object_size:                 Object Size Checking.
52419                                                             (line    6)
52420* __builtin_offsetof:                    Offsetof.           (line    6)
52421* __builtin_parity:                      Other Builtins.     (line  540)
52422* __builtin_parityl:                     Other Builtins.     (line  562)
52423* __builtin_parityll:                    Other Builtins.     (line  586)
52424* __builtin_popcount:                    Other Builtins.     (line  537)
52425* __builtin_popcountl:                   Other Builtins.     (line  558)
52426* __builtin_popcountll:                  Other Builtins.     (line  582)
52427* __builtin_powi:                        Other Builtins.     (line    6)
52428* __builtin_powif:                       Other Builtins.     (line    6)
52429* __builtin_powil:                       Other Builtins.     (line    6)
52430* __builtin_prefetch:                    Other Builtins.     (line  384)
52431* __builtin_return:                      Constructing Calls. (line   48)
52432* __builtin_return_address:              Return Address.     (line   11)
52433* __builtin_rx_brk:                      RX Built-in Functions.
52434                                                             (line   11)
52435* __builtin_rx_clrpsw:                   RX Built-in Functions.
52436                                                             (line   14)
52437* __builtin_rx_int:                      RX Built-in Functions.
52438                                                             (line   18)
52439* __builtin_rx_machi:                    RX Built-in Functions.
52440                                                             (line   22)
52441* __builtin_rx_maclo:                    RX Built-in Functions.
52442                                                             (line   27)
52443* __builtin_rx_mulhi:                    RX Built-in Functions.
52444                                                             (line   32)
52445* __builtin_rx_mullo:                    RX Built-in Functions.
52446                                                             (line   37)
52447* __builtin_rx_mvfachi:                  RX Built-in Functions.
52448                                                             (line   42)
52449* __builtin_rx_mvfacmi:                  RX Built-in Functions.
52450                                                             (line   46)
52451* __builtin_rx_mvfc:                     RX Built-in Functions.
52452                                                             (line   50)
52453* __builtin_rx_mvtachi:                  RX Built-in Functions.
52454                                                             (line   54)
52455* __builtin_rx_mvtaclo:                  RX Built-in Functions.
52456                                                             (line   58)
52457* __builtin_rx_mvtc:                     RX Built-in Functions.
52458                                                             (line   62)
52459* __builtin_rx_mvtipl:                   RX Built-in Functions.
52460                                                             (line   66)
52461* __builtin_rx_racw:                     RX Built-in Functions.
52462                                                             (line   70)
52463* __builtin_rx_revw:                     RX Built-in Functions.
52464                                                             (line   74)
52465* __builtin_rx_rmpa:                     RX Built-in Functions.
52466                                                             (line   79)
52467* __builtin_rx_round:                    RX Built-in Functions.
52468                                                             (line   83)
52469* __builtin_rx_sat:                      RX Built-in Functions.
52470                                                             (line   88)
52471* __builtin_rx_setpsw:                   RX Built-in Functions.
52472                                                             (line   92)
52473* __builtin_rx_wait:                     RX Built-in Functions.
52474                                                             (line   96)
52475* __builtin_set_thread_pointer:          SH Built-in Functions.
52476                                                             (line   10)
52477* __builtin_tabort:                      S/390 System z Built-in Functions.
52478                                                             (line   87)
52479* __builtin_tbegin:                      S/390 System z Built-in Functions.
52480                                                             (line    7)
52481* __builtin_tbegin_nofloat:              S/390 System z Built-in Functions.
52482                                                             (line   59)
52483* __builtin_tbegin_retry:                S/390 System z Built-in Functions.
52484                                                             (line   65)
52485* __builtin_tbegin_retry_nofloat:        S/390 System z Built-in Functions.
52486                                                             (line   72)
52487* __builtin_tbeginc:                     S/390 System z Built-in Functions.
52488                                                             (line   78)
52489* __builtin_tend:                        S/390 System z Built-in Functions.
52490                                                             (line   82)
52491* __builtin_thread_pointer:              SH Built-in Functions.
52492                                                             (line   20)
52493* __builtin_trap:                        Other Builtins.     (line  281)
52494* __builtin_tx_assist:                   S/390 System z Built-in Functions.
52495                                                             (line   92)
52496* __builtin_tx_nesting_depth:            S/390 System z Built-in Functions.
52497                                                             (line   98)
52498* __builtin_types_compatible_p:          Other Builtins.     (line  111)
52499* __builtin_unreachable:                 Other Builtins.     (line  288)
52500* __builtin_va_arg_pack:                 Constructing Calls. (line   53)
52501* __builtin_va_arg_pack_len:             Constructing Calls. (line   76)
52502* __complex__ keyword:                   Complex.            (line    6)
52503* __declspec(dllexport):                 Function Attributes.
52504                                                             (line  258)
52505* __declspec(dllimport):                 Function Attributes.
52506                                                             (line  293)
52507* __ea SPU Named Address Spaces:         Named Address Spaces.
52508                                                             (line  155)
52509* __extension__:                         Alternate Keywords. (line   30)
52510* __far M32C Named Address Spaces:       Named Address Spaces.
52511                                                             (line  139)
52512* __far RL78 Named Address Spaces:       Named Address Spaces.
52513                                                             (line  147)
52514* __flash AVR Named Address Spaces:      Named Address Spaces.
52515                                                             (line   31)
52516* __flash1 AVR Named Address Spaces:     Named Address Spaces.
52517                                                             (line   40)
52518* __flash2 AVR Named Address Spaces:     Named Address Spaces.
52519                                                             (line   40)
52520* __flash3 AVR Named Address Spaces:     Named Address Spaces.
52521                                                             (line   40)
52522* __flash4 AVR Named Address Spaces:     Named Address Spaces.
52523                                                             (line   40)
52524* __flash5 AVR Named Address Spaces:     Named Address Spaces.
52525                                                             (line   40)
52526* __float128 data type:                  Floating Types.     (line    6)
52527* __float80 data type:                   Floating Types.     (line    6)
52528* __fp16 data type:                      Half-Precision.     (line    6)
52529* __func__ identifier:                   Function Names.     (line    6)
52530* __FUNCTION__ identifier:               Function Names.     (line    6)
52531* __imag__ keyword:                      Complex.            (line   27)
52532* __int128 data types:                   __int128.           (line    6)
52533* __memx AVR Named Address Spaces:       Named Address Spaces.
52534                                                             (line   46)
52535* __PRETTY_FUNCTION__ identifier:        Function Names.     (line    6)
52536* __real__ keyword:                      Complex.            (line   27)
52537* __STDC_HOSTED__:                       Standards.          (line   13)
52538* __sync_add_and_fetch:                  __sync Builtins.    (line   60)
52539* __sync_and_and_fetch:                  __sync Builtins.    (line   60)
52540* __sync_bool_compare_and_swap:          __sync Builtins.    (line   71)
52541* __sync_fetch_and_add:                  __sync Builtins.    (line   44)
52542* __sync_fetch_and_and:                  __sync Builtins.    (line   44)
52543* __sync_fetch_and_nand:                 __sync Builtins.    (line   44)
52544* __sync_fetch_and_or:                   __sync Builtins.    (line   44)
52545* __sync_fetch_and_sub:                  __sync Builtins.    (line   44)
52546* __sync_fetch_and_xor:                  __sync Builtins.    (line   44)
52547* __sync_lock_release:                   __sync Builtins.    (line  101)
52548* __sync_lock_test_and_set:              __sync Builtins.    (line   83)
52549* __sync_nand_and_fetch:                 __sync Builtins.    (line   60)
52550* __sync_or_and_fetch:                   __sync Builtins.    (line   60)
52551* __sync_sub_and_fetch:                  __sync Builtins.    (line   60)
52552* __sync_synchronize:                    __sync Builtins.    (line   80)
52553* __sync_val_compare_and_swap:           __sync Builtins.    (line   71)
52554* __sync_xor_and_fetch:                  __sync Builtins.    (line   60)
52555* __thread:                              Thread-Local.       (line    6)
52556* _Accum data type:                      Fixed-Point.        (line    6)
52557* _Complex keyword:                      Complex.            (line    6)
52558* _Decimal128 data type:                 Decimal Float.      (line    6)
52559* _Decimal32 data type:                  Decimal Float.      (line    6)
52560* _Decimal64 data type:                  Decimal Float.      (line    6)
52561* _exit:                                 Other Builtins.     (line    6)
52562* _Exit:                                 Other Builtins.     (line    6)
52563* _Fract data type:                      Fixed-Point.        (line    6)
52564* _HTM_FIRST_USER_ABORT_CODE:            S/390 System z Built-in Functions.
52565                                                             (line   48)
52566* _Sat data type:                        Fixed-Point.        (line    6)
52567* _xabort:                               X86 transactional memory intrinsics.
52568                                                             (line   68)
52569* _xbegin:                               X86 transactional memory intrinsics.
52570                                                             (line   20)
52571* _xend:                                 X86 transactional memory intrinsics.
52572                                                             (line   59)
52573* _xtest:                                X86 transactional memory intrinsics.
52574                                                             (line   64)
52575* AArch64 Options:                       AArch64 Options.    (line    6)
52576* ABI:                                   Compatibility.      (line    6)
52577* abi_tag attribute:                     C++ Attributes.     (line    9)
52578* abort:                                 Other Builtins.     (line    6)
52579* abs:                                   Other Builtins.     (line    6)
52580* accessing volatiles <1>:               C++ Volatiles.      (line    6)
52581* accessing volatiles:                   Volatiles.          (line    6)
52582* acos:                                  Other Builtins.     (line    6)
52583* acosf:                                 Other Builtins.     (line    6)
52584* acosh:                                 Other Builtins.     (line    6)
52585* acoshf:                                Other Builtins.     (line    6)
52586* acoshl:                                Other Builtins.     (line    6)
52587* acosl:                                 Other Builtins.     (line    6)
52588* Ada:                                   G++ and GCC.        (line    6)
52589* additional floating types:             Floating Types.     (line    6)
52590* address constraints:                   Simple Constraints. (line  154)
52591* address of a label:                    Labels as Values.   (line    6)
52592* address_operand:                       Simple Constraints. (line  158)
52593* alias attribute:                       Function Attributes.
52594                                                             (line   37)
52595* aligned attribute <1>:                 Type Attributes.    (line   31)
52596* aligned attribute <2>:                 Variable Attributes.
52597                                                             (line   23)
52598* aligned attribute:                     Function Attributes.
52599                                                             (line   50)
52600* alignment:                             Alignment.          (line    6)
52601* alloc_size attribute:                  Function Attributes.
52602                                                             (line   70)
52603* alloca:                                Other Builtins.     (line    6)
52604* alloca vs variable-length arrays:      Variable Length.    (line   26)
52605* Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes.
52606                                                             (line  947)
52607* alternate keywords:                    Alternate Keywords. (line    6)
52608* always_inline function attribute:      Function Attributes.
52609                                                             (line   91)
52610* AMD x86-64 Options:                    i386 and x86-64 Options.
52611                                                             (line    6)
52612* AMD1:                                  Standards.          (line   13)
52613* ANSI C:                                Standards.          (line   13)
52614* ANSI C standard:                       Standards.          (line   13)
52615* ANSI C89:                              Standards.          (line   13)
52616* ANSI support:                          C Dialect Options.  (line   10)
52617* ANSI X3.159-1989:                      Standards.          (line   13)
52618* apostrophes:                           Incompatibilities.  (line  116)
52619* application binary interface:          Compatibility.      (line    6)
52620* ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
52621                                                             (line    6)
52622* ARM options:                           ARM Options.        (line    6)
52623* arrays of length zero:                 Zero Length.        (line    6)
52624* arrays of variable length:             Variable Length.    (line    6)
52625* arrays, non-lvalue:                    Subscripting.       (line    6)
52626* artificial function attribute:         Function Attributes.
52627                                                             (line  134)
52628* asin:                                  Other Builtins.     (line    6)
52629* asinf:                                 Other Builtins.     (line    6)
52630* asinh:                                 Other Builtins.     (line    6)
52631* asinhf:                                Other Builtins.     (line    6)
52632* asinhl:                                Other Builtins.     (line    6)
52633* asinl:                                 Other Builtins.     (line    6)
52634* asm constraints:                       Constraints.        (line    6)
52635* asm expressions:                       Extended Asm.       (line    6)
52636* assembler instructions:                Extended Asm.       (line    6)
52637* assembler names for identifiers:       Asm Labels.         (line    6)
52638* assembly code, invalid:                Bug Criteria.       (line   12)
52639* atan:                                  Other Builtins.     (line    6)
52640* atan2:                                 Other Builtins.     (line    6)
52641* atan2f:                                Other Builtins.     (line    6)
52642* atan2l:                                Other Builtins.     (line    6)
52643* atanf:                                 Other Builtins.     (line    6)
52644* atanh:                                 Other Builtins.     (line    6)
52645* atanhf:                                Other Builtins.     (line    6)
52646* atanhl:                                Other Builtins.     (line    6)
52647* atanl:                                 Other Builtins.     (line    6)
52648* attribute of types:                    Type Attributes.    (line    6)
52649* attribute of variables:                Variable Attributes.
52650                                                             (line    6)
52651* attribute syntax:                      Attribute Syntax.   (line    6)
52652* autoincrement/decrement addressing:    Simple Constraints. (line   30)
52653* automatic inline for C++ member fns:   Inline.             (line   71)
52654* AVR Options:                           AVR Options.        (line    6)
52655* Backwards Compatibility:               Backwards Compatibility.
52656                                                             (line    6)
52657* base class members:                    Name lookup.        (line    6)
52658* bcmp:                                  Other Builtins.     (line    6)
52659* below100 attribute:                    Variable Attributes.
52660                                                             (line  584)
52661* binary compatibility:                  Compatibility.      (line    6)
52662* Binary constants using the 0b prefix:  Binary constants.   (line    6)
52663* Blackfin Options:                      Blackfin Options.   (line    6)
52664* bound pointer to member function:      Bound member functions.
52665                                                             (line    6)
52666* bounds checking:                       Optimize Options.   (line  407)
52667* bug criteria:                          Bug Criteria.       (line    6)
52668* bugs:                                  Bugs.               (line    6)
52669* bugs, known:                           Trouble.            (line    6)
52670* built-in functions <1>:                Other Builtins.     (line    6)
52671* built-in functions:                    C Dialect Options.  (line  205)
52672* bzero:                                 Other Builtins.     (line    6)
52673* C compilation options:                 Invoking GCC.       (line   17)
52674* C intermediate output, nonexistent:    G++ and GCC.        (line   35)
52675* C language extensions:                 C Extensions.       (line    6)
52676* C language, traditional:               C Dialect Options.  (line  307)
52677* C standard:                            Standards.          (line   13)
52678* C standards:                           Standards.          (line   13)
52679* c++:                                   Invoking G++.       (line   14)
52680* C++:                                   G++ and GCC.        (line   30)
52681* C++ comments:                          C++ Comments.       (line    6)
52682* C++ compilation options:               Invoking GCC.       (line   23)
52683* C++ interface and implementation headers: C++ Interface.   (line    6)
52684* C++ language extensions:               C++ Extensions.     (line    6)
52685* C++ member fns, automatically inline:  Inline.             (line   71)
52686* C++ misunderstandings:                 C++ Misunderstandings.
52687                                                             (line    6)
52688* C++ options, command-line:             C++ Dialect Options.
52689                                                             (line    6)
52690* C++ pragmas, effect on inlining:       C++ Interface.      (line   66)
52691* C++ source file suffixes:              Invoking G++.       (line    6)
52692* C++ static data, declaring and defining: Static Definitions.
52693                                                             (line    6)
52694* C11:                                   Standards.          (line   13)
52695* C1X:                                   Standards.          (line   13)
52696* C6X Options:                           C6X Options.        (line    6)
52697* C89:                                   Standards.          (line   13)
52698* C90:                                   Standards.          (line   13)
52699* C94:                                   Standards.          (line   13)
52700* C95:                                   Standards.          (line   13)
52701* C99:                                   Standards.          (line   13)
52702* C9X:                                   Standards.          (line   13)
52703* C_INCLUDE_PATH:                        Environment Variables.
52704                                                             (line  130)
52705* cabs:                                  Other Builtins.     (line    6)
52706* cabsf:                                 Other Builtins.     (line    6)
52707* cabsl:                                 Other Builtins.     (line    6)
52708* cacos:                                 Other Builtins.     (line    6)
52709* cacosf:                                Other Builtins.     (line    6)
52710* cacosh:                                Other Builtins.     (line    6)
52711* cacoshf:                               Other Builtins.     (line    6)
52712* cacoshl:                               Other Builtins.     (line    6)
52713* cacosl:                                Other Builtins.     (line    6)
52714* callee_pop_aggregate_return attribute: Function Attributes.
52715                                                             (line  893)
52716* calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes.
52717                                                             (line  532)
52718* calloc:                                Other Builtins.     (line    6)
52719* carg:                                  Other Builtins.     (line    6)
52720* cargf:                                 Other Builtins.     (line    6)
52721* cargl:                                 Other Builtins.     (line    6)
52722* case labels in initializers:           Designated Inits.   (line    6)
52723* case ranges:                           Case Ranges.        (line    6)
52724* casin:                                 Other Builtins.     (line    6)
52725* casinf:                                Other Builtins.     (line    6)
52726* casinh:                                Other Builtins.     (line    6)
52727* casinhf:                               Other Builtins.     (line    6)
52728* casinhl:                               Other Builtins.     (line    6)
52729* casinl:                                Other Builtins.     (line    6)
52730* cast to a union:                       Cast to Union.      (line    6)
52731* catan:                                 Other Builtins.     (line    6)
52732* catanf:                                Other Builtins.     (line    6)
52733* catanh:                                Other Builtins.     (line    6)
52734* catanhf:                               Other Builtins.     (line    6)
52735* catanhl:                               Other Builtins.     (line    6)
52736* catanl:                                Other Builtins.     (line    6)
52737* cbrt:                                  Other Builtins.     (line    6)
52738* cbrtf:                                 Other Builtins.     (line    6)
52739* cbrtl:                                 Other Builtins.     (line    6)
52740* ccos:                                  Other Builtins.     (line    6)
52741* ccosf:                                 Other Builtins.     (line    6)
52742* ccosh:                                 Other Builtins.     (line    6)
52743* ccoshf:                                Other Builtins.     (line    6)
52744* ccoshl:                                Other Builtins.     (line    6)
52745* ccosl:                                 Other Builtins.     (line    6)
52746* ceil:                                  Other Builtins.     (line    6)
52747* ceilf:                                 Other Builtins.     (line    6)
52748* ceill:                                 Other Builtins.     (line    6)
52749* cexp:                                  Other Builtins.     (line    6)
52750* cexpf:                                 Other Builtins.     (line    6)
52751* cexpl:                                 Other Builtins.     (line    6)
52752* character set, execution:              Preprocessor Options.
52753                                                             (line  554)
52754* character set, input:                  Preprocessor Options.
52755                                                             (line  567)
52756* character set, input normalization:    Warning Options.    (line 1284)
52757* character set, wide execution:         Preprocessor Options.
52758                                                             (line  559)
52759* cimag:                                 Other Builtins.     (line    6)
52760* cimagf:                                Other Builtins.     (line    6)
52761* cimagl:                                Other Builtins.     (line    6)
52762* cleanup attribute:                     Variable Attributes.
52763                                                             (line   89)
52764* clog:                                  Other Builtins.     (line    6)
52765* clogf:                                 Other Builtins.     (line    6)
52766* clogl:                                 Other Builtins.     (line    6)
52767* COBOL:                                 G++ and GCC.        (line   23)
52768* code generation conventions:           Code Gen Options.   (line    6)
52769* code, mixed with declarations:         Mixed Declarations. (line    6)
52770* cold function attribute:               Function Attributes.
52771                                                             (line 1170)
52772* cold label attribute:                  Function Attributes.
52773                                                             (line 1188)
52774* command options:                       Invoking GCC.       (line    6)
52775* comments, C++ style:                   C++ Comments.       (line    6)
52776* common attribute:                      Variable Attributes.
52777                                                             (line  105)
52778* comparison of signed and unsigned values, warning: Warning Options.
52779                                                             (line 1156)
52780* compiler bugs, reporting:              Bug Reporting.      (line    6)
52781* compiler compared to C++ preprocessor: G++ and GCC.        (line   35)
52782* compiler options, C++:                 C++ Dialect Options.
52783                                                             (line    6)
52784* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
52785                                                             (line    6)
52786* compiler version, specifying:          Target Options.     (line    6)
52787* COMPILER_PATH:                         Environment Variables.
52788                                                             (line   91)
52789* complex conjugation:                   Complex.            (line   34)
52790* complex numbers:                       Complex.            (line    6)
52791* compound literals:                     Compound Literals.  (line    6)
52792* computed gotos:                        Labels as Values.   (line    6)
52793* conditional expressions, extensions:   Conditionals.       (line    6)
52794* conflicting types:                     Disappointments.    (line   21)
52795* conj:                                  Other Builtins.     (line    6)
52796* conjf:                                 Other Builtins.     (line    6)
52797* conjl:                                 Other Builtins.     (line    6)
52798* const applied to function:             Function Attributes.
52799                                                             (line    6)
52800* const function attribute:              Function Attributes.
52801                                                             (line  183)
52802* constants in constraints:              Simple Constraints. (line   70)
52803* constraint modifier characters:        Modifiers.          (line    6)
52804* constraint, matching:                  Simple Constraints. (line  139)
52805* constraints, asm:                      Constraints.        (line    6)
52806* constraints, machine specific:         Machine Constraints.
52807                                                             (line    6)
52808* constructing calls:                    Constructing Calls. (line    6)
52809* constructor expressions:               Compound Literals.  (line    6)
52810* constructor function attribute:        Function Attributes.
52811                                                             (line  211)
52812* contributors:                          Contributors.       (line    6)
52813* copysign:                              Other Builtins.     (line    6)
52814* copysignf:                             Other Builtins.     (line    6)
52815* copysignl:                             Other Builtins.     (line    6)
52816* core dump:                             Bug Criteria.       (line    9)
52817* cos:                                   Other Builtins.     (line    6)
52818* cosf:                                  Other Builtins.     (line    6)
52819* cosh:                                  Other Builtins.     (line    6)
52820* coshf:                                 Other Builtins.     (line    6)
52821* coshl:                                 Other Builtins.     (line    6)
52822* cosl:                                  Other Builtins.     (line    6)
52823* CPATH:                                 Environment Variables.
52824                                                             (line  129)
52825* CPLUS_INCLUDE_PATH:                    Environment Variables.
52826                                                             (line  131)
52827* cpow:                                  Other Builtins.     (line    6)
52828* cpowf:                                 Other Builtins.     (line    6)
52829* cpowl:                                 Other Builtins.     (line    6)
52830* cproj:                                 Other Builtins.     (line    6)
52831* cprojf:                                Other Builtins.     (line    6)
52832* cprojl:                                Other Builtins.     (line    6)
52833* CR16 Options:                          CR16 Options.       (line    6)
52834* creal:                                 Other Builtins.     (line    6)
52835* crealf:                                Other Builtins.     (line    6)
52836* creall:                                Other Builtins.     (line    6)
52837* CRIS Options:                          CRIS Options.       (line    6)
52838* cross compiling:                       Target Options.     (line    6)
52839* csin:                                  Other Builtins.     (line    6)
52840* csinf:                                 Other Builtins.     (line    6)
52841* csinh:                                 Other Builtins.     (line    6)
52842* csinhf:                                Other Builtins.     (line    6)
52843* csinhl:                                Other Builtins.     (line    6)
52844* csinl:                                 Other Builtins.     (line    6)
52845* csqrt:                                 Other Builtins.     (line    6)
52846* csqrtf:                                Other Builtins.     (line    6)
52847* csqrtl:                                Other Builtins.     (line    6)
52848* ctan:                                  Other Builtins.     (line    6)
52849* ctanf:                                 Other Builtins.     (line    6)
52850* ctanh:                                 Other Builtins.     (line    6)
52851* ctanhf:                                Other Builtins.     (line    6)
52852* ctanhl:                                Other Builtins.     (line    6)
52853* ctanl:                                 Other Builtins.     (line    6)
52854* Darwin options:                        Darwin Options.     (line    6)
52855* dcgettext:                             Other Builtins.     (line    6)
52856* DD integer suffix:                     Decimal Float.      (line    6)
52857* dd integer suffix:                     Decimal Float.      (line    6)
52858* deallocating variable length arrays:   Variable Length.    (line   22)
52859* debugging information options:         Debugging Options.  (line    6)
52860* decimal floating types:                Decimal Float.      (line    6)
52861* declaration scope:                     Incompatibilities.  (line   80)
52862* declarations inside expressions:       Statement Exprs.    (line    6)
52863* declarations, mixed with code:         Mixed Declarations. (line    6)
52864* declaring attributes of functions:     Function Attributes.
52865                                                             (line    6)
52866* declaring static data in C++:          Static Definitions. (line    6)
52867* defining static data in C++:           Static Definitions. (line    6)
52868* dependencies for make as output:       Environment Variables.
52869                                                             (line  157)
52870* dependencies, make:                    Preprocessor Options.
52871                                                             (line  185)
52872* DEPENDENCIES_OUTPUT:                   Environment Variables.
52873                                                             (line  156)
52874* dependent name lookup:                 Name lookup.        (line    6)
52875* deprecated attribute:                  Variable Attributes.
52876                                                             (line  114)
52877* deprecated attribute.:                 Function Attributes.
52878                                                             (line  233)
52879* designated initializers:               Designated Inits.   (line    6)
52880* designator lists:                      Designated Inits.   (line   94)
52881* designators:                           Designated Inits.   (line   61)
52882* destructor function attribute:         Function Attributes.
52883                                                             (line  211)
52884* DF integer suffix:                     Decimal Float.      (line    6)
52885* df integer suffix:                     Decimal Float.      (line    6)
52886* dgettext:                              Other Builtins.     (line    6)
52887* diagnostic messages:                   Language Independent Options.
52888                                                             (line    6)
52889* dialect options:                       C Dialect Options.  (line    6)
52890* digits in constraint:                  Simple Constraints. (line  127)
52891* directory options:                     Directory Options.  (line    6)
52892* disinterrupt attribute:                Function Attributes.
52893                                                             (line  253)
52894* DL integer suffix:                     Decimal Float.      (line    6)
52895* dl integer suffix:                     Decimal Float.      (line    6)
52896* dollar signs in identifier names:      Dollar Signs.       (line    6)
52897* double-word arithmetic:                Long Long.          (line    6)
52898* downward funargs:                      Nested Functions.   (line    6)
52899* drem:                                  Other Builtins.     (line    6)
52900* dremf:                                 Other Builtins.     (line    6)
52901* dreml:                                 Other Builtins.     (line    6)
52902* E in constraint:                       Simple Constraints. (line   89)
52903* earlyclobber operand:                  Modifiers.          (line   25)
52904* eight-bit data on the H8/300, H8/300H, and H8S: Function Attributes.
52905                                                             (line  346)
52906* EIND:                                  AVR Options.        (line  220)
52907* empty structures:                      Empty Structures.   (line    6)
52908* environment variables:                 Environment Variables.
52909                                                             (line    6)
52910* erf:                                   Other Builtins.     (line    6)
52911* erfc:                                  Other Builtins.     (line    6)
52912* erfcf:                                 Other Builtins.     (line    6)
52913* erfcl:                                 Other Builtins.     (line    6)
52914* erff:                                  Other Builtins.     (line    6)
52915* erfl:                                  Other Builtins.     (line    6)
52916* error function attribute:              Function Attributes.
52917                                                             (line  153)
52918* error messages:                        Warnings and Errors.
52919                                                             (line    6)
52920* escaped newlines:                      Escaped Newlines.   (line    6)
52921* exception handler functions on the Blackfin processor: Function Attributes.
52922                                                             (line  356)
52923* exclamation point:                     Multi-Alternative.  (line   33)
52924* exit:                                  Other Builtins.     (line    6)
52925* exp:                                   Other Builtins.     (line    6)
52926* exp10:                                 Other Builtins.     (line    6)
52927* exp10f:                                Other Builtins.     (line    6)
52928* exp10l:                                Other Builtins.     (line    6)
52929* exp2:                                  Other Builtins.     (line    6)
52930* exp2f:                                 Other Builtins.     (line    6)
52931* exp2l:                                 Other Builtins.     (line    6)
52932* expf:                                  Other Builtins.     (line    6)
52933* expl:                                  Other Builtins.     (line    6)
52934* explicit register variables:           Explicit Reg Vars.  (line    6)
52935* expm1:                                 Other Builtins.     (line    6)
52936* expm1f:                                Other Builtins.     (line    6)
52937* expm1l:                                Other Builtins.     (line    6)
52938* expressions containing statements:     Statement Exprs.    (line    6)
52939* expressions, constructor:              Compound Literals.  (line    6)
52940* extended asm:                          Extended Asm.       (line    6)
52941* extensible constraints:                Simple Constraints. (line  163)
52942* extensions, ?::                        Conditionals.       (line    6)
52943* extensions, C language:                C Extensions.       (line    6)
52944* extensions, C++ language:              C++ Extensions.     (line    6)
52945* external declaration scope:            Incompatibilities.  (line   80)
52946* externally_visible attribute.:         Function Attributes.
52947                                                             (line  362)
52948* F in constraint:                       Simple Constraints. (line   94)
52949* fabs:                                  Other Builtins.     (line    6)
52950* fabsf:                                 Other Builtins.     (line    6)
52951* fabsl:                                 Other Builtins.     (line    6)
52952* fatal signal:                          Bug Criteria.       (line    9)
52953* fdim:                                  Other Builtins.     (line    6)
52954* fdimf:                                 Other Builtins.     (line    6)
52955* fdiml:                                 Other Builtins.     (line    6)
52956* FDL, GNU Free Documentation License:   GNU Free Documentation License.
52957                                                             (line    6)
52958* ffs:                                   Other Builtins.     (line    6)
52959* file name suffix:                      Overall Options.    (line   14)
52960* file names:                            Link Options.       (line   10)
52961* fixed-point types:                     Fixed-Point.        (line    6)
52962* flatten function attribute:            Function Attributes.
52963                                                             (line  146)
52964* flexible array members:                Zero Length.        (line    6)
52965* float as function value type:          Incompatibilities.  (line  141)
52966* floating point precision:              Disappointments.    (line   68)
52967* floating-point precision:              Optimize Options.   (line 1873)
52968* floor:                                 Other Builtins.     (line    6)
52969* floorf:                                Other Builtins.     (line    6)
52970* floorl:                                Other Builtins.     (line    6)
52971* fma:                                   Other Builtins.     (line    6)
52972* fmaf:                                  Other Builtins.     (line    6)
52973* fmal:                                  Other Builtins.     (line    6)
52974* fmax:                                  Other Builtins.     (line    6)
52975* fmaxf:                                 Other Builtins.     (line    6)
52976* fmaxl:                                 Other Builtins.     (line    6)
52977* fmin:                                  Other Builtins.     (line    6)
52978* fminf:                                 Other Builtins.     (line    6)
52979* fminl:                                 Other Builtins.     (line    6)
52980* fmod:                                  Other Builtins.     (line    6)
52981* fmodf:                                 Other Builtins.     (line    6)
52982* fmodl:                                 Other Builtins.     (line    6)
52983* force_align_arg_pointer attribute:     Function Attributes.
52984                                                             (line 1230)
52985* format function attribute:             Function Attributes.
52986                                                             (line  419)
52987* format_arg function attribute:         Function Attributes.
52988                                                             (line  485)
52989* Fortran:                               G++ and GCC.        (line    6)
52990* forwarder_section attribute:           Function Attributes.
52991                                                             (line  685)
52992* forwarding calls:                      Constructing Calls. (line    6)
52993* fprintf:                               Other Builtins.     (line    6)
52994* fprintf_unlocked:                      Other Builtins.     (line    6)
52995* fputs:                                 Other Builtins.     (line    6)
52996* fputs_unlocked:                        Other Builtins.     (line    6)
52997* FR30 Options:                          FR30 Options.       (line    6)
52998* freestanding environment:              Standards.          (line   13)
52999* freestanding implementation:           Standards.          (line   13)
53000* frexp:                                 Other Builtins.     (line    6)
53001* frexpf:                                Other Builtins.     (line    6)
53002* frexpl:                                Other Builtins.     (line    6)
53003* FRV Options:                           FRV Options.        (line    6)
53004* fscanf:                                Other Builtins.     (line    6)
53005* fscanf, and constant strings:          Incompatibilities.  (line   17)
53006* function addressability on the M32R/D: Function Attributes.
53007                                                             (line  853)
53008* function attributes:                   Function Attributes.
53009                                                             (line    6)
53010* function pointers, arithmetic:         Pointer Arith.      (line    6)
53011* function prototype declarations:       Function Prototypes.
53012                                                             (line    6)
53013* function versions:                     Function Multiversioning.
53014                                                             (line    6)
53015* function without a prologue/epilogue code: Function Attributes.
53016                                                             (line  924)
53017* function, size of pointer to:          Pointer Arith.      (line    6)
53018* functions called via pointer on the RS/6000 and PowerPC: Function Attributes.
53019                                                             (line  808)
53020* functions in arbitrary sections:       Function Attributes.
53021                                                             (line    6)
53022* functions that are dynamically resolved: Function Attributes.
53023                                                             (line    6)
53024* functions that are passed arguments in registers on the 386: Function Attributes.
53025                                                             (line    6)
53026* functions that behave like malloc:     Function Attributes.
53027                                                             (line    6)
53028* functions that do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
53029                                                             (line  937)
53030* functions that do not pop the argument stack on the 386: Function Attributes.
53031                                                             (line    6)
53032* functions that do pop the argument stack on the 386: Function Attributes.
53033                                                             (line  177)
53034* functions that handle memory bank switching: Function Attributes.
53035                                                             (line  375)
53036* functions that have different compilation options on the 386: Function Attributes.
53037                                                             (line    6)
53038* functions that have different optimization options: Function Attributes.
53039                                                             (line    6)
53040* functions that have no side effects:   Function Attributes.
53041                                                             (line    6)
53042* functions that never return:           Function Attributes.
53043                                                             (line    6)
53044* functions that pop the argument stack on the 386: Function Attributes.
53045                                                             (line    6)
53046* functions that return more than once:  Function Attributes.
53047                                                             (line    6)
53048* functions with non-null pointer arguments: Function Attributes.
53049                                                             (line    6)
53050* functions with printf, scanf, strftime or strfmon style arguments: Function Attributes.
53051                                                             (line    6)
53052* g in constraint:                       Simple Constraints. (line  120)
53053* G in constraint:                       Simple Constraints. (line   98)
53054* g++:                                   Invoking G++.       (line   14)
53055* G++:                                   G++ and GCC.        (line   30)
53056* gamma:                                 Other Builtins.     (line    6)
53057* gamma_r:                               Other Builtins.     (line    6)
53058* gammaf:                                Other Builtins.     (line    6)
53059* gammaf_r:                              Other Builtins.     (line    6)
53060* gammal:                                Other Builtins.     (line    6)
53061* gammal_r:                              Other Builtins.     (line    6)
53062* GCC:                                   G++ and GCC.        (line    6)
53063* GCC command options:                   Invoking GCC.       (line    6)
53064* GCC_COMPARE_DEBUG:                     Environment Variables.
53065                                                             (line   52)
53066* GCC_EXEC_PREFIX:                       Environment Variables.
53067                                                             (line   57)
53068* gcc_struct:                            Type Attributes.    (line  324)
53069* gcc_struct attribute:                  Variable Attributes.
53070                                                             (line  445)
53071* gcov:                                  Debugging Options.  (line  411)
53072* gettext:                               Other Builtins.     (line    6)
53073* global offset table:                   Code Gen Options.   (line  280)
53074* global register after longjmp:         Global Reg Vars.    (line   65)
53075* global register variables:             Global Reg Vars.    (line    6)
53076* GNAT:                                  G++ and GCC.        (line   30)
53077* GNU C Compiler:                        G++ and GCC.        (line    6)
53078* GNU Compiler Collection:               G++ and GCC.        (line    6)
53079* gnu_inline function attribute:         Function Attributes.
53080                                                             (line   96)
53081* Go:                                    G++ and GCC.        (line    6)
53082* goto with computed label:              Labels as Values.   (line    6)
53083* gprof:                                 Debugging Options.  (line  333)
53084* grouping options:                      Invoking GCC.       (line   26)
53085* H in constraint:                       Simple Constraints. (line   98)
53086* half-precision floating point:         Half-Precision.     (line    6)
53087* hardware models and configurations, specifying: Submodel Options.
53088                                                             (line    6)
53089* hex floats:                            Hex Floats.         (line    6)
53090* HK fixed-suffix:                       Fixed-Point.        (line    6)
53091* hk fixed-suffix:                       Fixed-Point.        (line    6)
53092* hosted environment <1>:                C Dialect Options.  (line  239)
53093* hosted environment:                    Standards.          (line   13)
53094* hosted implementation:                 Standards.          (line   13)
53095* hot function attribute:                Function Attributes.
53096                                                             (line 1148)
53097* hot label attribute:                   Function Attributes.
53098                                                             (line 1160)
53099* hotpatch attribute:                    Function Attributes.
53100                                                             (line  912)
53101* HPPA Options:                          HPPA Options.       (line    6)
53102* HR fixed-suffix:                       Fixed-Point.        (line    6)
53103* hr fixed-suffix:                       Fixed-Point.        (line    6)
53104* hypot:                                 Other Builtins.     (line    6)
53105* hypotf:                                Other Builtins.     (line    6)
53106* hypotl:                                Other Builtins.     (line    6)
53107* I in constraint:                       Simple Constraints. (line   81)
53108* i in constraint:                       Simple Constraints. (line   70)
53109* i386 and x86-64 Windows Options:       i386 and x86-64 Windows Options.
53110                                                             (line    6)
53111* i386 Options:                          i386 and x86-64 Options.
53112                                                             (line    6)
53113* IA-64 Options:                         IA-64 Options.      (line    6)
53114* IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
53115                                                             (line    6)
53116* identifier names, dollar signs in:     Dollar Signs.       (line    6)
53117* identifiers, names in assembler code:  Asm Labels.         (line    6)
53118* ifunc attribute:                       Function Attributes.
53119                                                             (line  593)
53120* ilogb:                                 Other Builtins.     (line    6)
53121* ilogbf:                                Other Builtins.     (line    6)
53122* ilogbl:                                Other Builtins.     (line    6)
53123* imaxabs:                               Other Builtins.     (line    6)
53124* implementation-defined behavior, C language: C Implementation.
53125                                                             (line    6)
53126* implementation-defined behavior, C++ language: C++ Implementation.
53127                                                             (line    6)
53128* implied #pragma implementation:        C++ Interface.      (line   46)
53129* incompatibilities of GCC:              Incompatibilities.  (line    6)
53130* increment operators:                   Bug Criteria.       (line   17)
53131* index:                                 Other Builtins.     (line    6)
53132* indirect calls on ARM:                 Function Attributes.
53133                                                             (line  798)
53134* indirect calls on MIPS:                Function Attributes.
53135                                                             (line  820)
53136* init_priority attribute:               C++ Attributes.     (line   30)
53137* initializations in expressions:        Compound Literals.  (line    6)
53138* initializers with labeled elements:    Designated Inits.   (line    6)
53139* initializers, non-constant:            Initializers.       (line    6)
53140* inline automatic for C++ member fns:   Inline.             (line   71)
53141* inline functions:                      Inline.             (line    6)
53142* inline functions, omission of:         Inline.             (line   51)
53143* inlining and C++ pragmas:              C++ Interface.      (line   66)
53144* installation trouble:                  Trouble.            (line    6)
53145* integrating function code:             Inline.             (line    6)
53146* Intel 386 Options:                     i386 and x86-64 Options.
53147                                                             (line    6)
53148* interface and implementation headers, C++: C++ Interface.  (line    6)
53149* intermediate C version, nonexistent:   G++ and GCC.        (line   35)
53150* interrupt handler functions:           Function Attributes.
53151                                                             (line  141)
53152* interrupt handler functions on the AVR processors: Function Attributes.
53153                                                             (line 1325)
53154* interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes.
53155                                                             (line  735)
53156* interrupt service routines on ARM:     Function Attributes.
53157                                                             (line  750)
53158* interrupt thread functions on fido:    Function Attributes.
53159                                                             (line  742)
53160* introduction:                          Top.                (line    6)
53161* invalid assembly code:                 Bug Criteria.       (line   12)
53162* invalid input:                         Bug Criteria.       (line   42)
53163* invoking g++:                          Invoking G++.       (line   22)
53164* isalnum:                               Other Builtins.     (line    6)
53165* isalpha:                               Other Builtins.     (line    6)
53166* isascii:                               Other Builtins.     (line    6)
53167* isblank:                               Other Builtins.     (line    6)
53168* iscntrl:                               Other Builtins.     (line    6)
53169* isdigit:                               Other Builtins.     (line    6)
53170* isgraph:                               Other Builtins.     (line    6)
53171* islower:                               Other Builtins.     (line    6)
53172* ISO 9899:                              Standards.          (line   13)
53173* ISO C:                                 Standards.          (line   13)
53174* ISO C standard:                        Standards.          (line   13)
53175* ISO C11:                               Standards.          (line   13)
53176* ISO C1X:                               Standards.          (line   13)
53177* ISO C90:                               Standards.          (line   13)
53178* ISO C94:                               Standards.          (line   13)
53179* ISO C95:                               Standards.          (line   13)
53180* ISO C99:                               Standards.          (line   13)
53181* ISO C9X:                               Standards.          (line   13)
53182* ISO support:                           C Dialect Options.  (line   10)
53183* ISO/IEC 9899:                          Standards.          (line   13)
53184* isprint:                               Other Builtins.     (line    6)
53185* ispunct:                               Other Builtins.     (line    6)
53186* isspace:                               Other Builtins.     (line    6)
53187* isupper:                               Other Builtins.     (line    6)
53188* iswalnum:                              Other Builtins.     (line    6)
53189* iswalpha:                              Other Builtins.     (line    6)
53190* iswblank:                              Other Builtins.     (line    6)
53191* iswcntrl:                              Other Builtins.     (line    6)
53192* iswdigit:                              Other Builtins.     (line    6)
53193* iswgraph:                              Other Builtins.     (line    6)
53194* iswlower:                              Other Builtins.     (line    6)
53195* iswprint:                              Other Builtins.     (line    6)
53196* iswpunct:                              Other Builtins.     (line    6)
53197* iswspace:                              Other Builtins.     (line    6)
53198* iswupper:                              Other Builtins.     (line    6)
53199* iswxdigit:                             Other Builtins.     (line    6)
53200* isxdigit:                              Other Builtins.     (line    6)
53201* j0:                                    Other Builtins.     (line    6)
53202* j0f:                                   Other Builtins.     (line    6)
53203* j0l:                                   Other Builtins.     (line    6)
53204* j1:                                    Other Builtins.     (line    6)
53205* j1f:                                   Other Builtins.     (line    6)
53206* j1l:                                   Other Builtins.     (line    6)
53207* Java:                                  G++ and GCC.        (line    6)
53208* java_interface attribute:              C++ Attributes.     (line   50)
53209* jn:                                    Other Builtins.     (line    6)
53210* jnf:                                   Other Builtins.     (line    6)
53211* jnl:                                   Other Builtins.     (line    6)
53212* K fixed-suffix:                        Fixed-Point.        (line    6)
53213* k fixed-suffix:                        Fixed-Point.        (line    6)
53214* keep_interrupts_masked attribute:      Function Attributes.
53215                                                             (line  707)
53216* keywords, alternate:                   Alternate Keywords. (line    6)
53217* known causes of trouble:               Trouble.            (line    6)
53218* l1_data variable attribute:            Variable Attributes.
53219                                                             (line  356)
53220* l1_data_A variable attribute:          Variable Attributes.
53221                                                             (line  356)
53222* l1_data_B variable attribute:          Variable Attributes.
53223                                                             (line  356)
53224* l1_text function attribute:            Function Attributes.
53225                                                             (line  759)
53226* l2 function attribute:                 Function Attributes.
53227                                                             (line  765)
53228* l2 variable attribute:                 Variable Attributes.
53229                                                             (line  364)
53230* labeled elements in initializers:      Designated Inits.   (line    6)
53231* labels as values:                      Labels as Values.   (line    6)
53232* labs:                                  Other Builtins.     (line    6)
53233* LANG:                                  Environment Variables.
53234                                                             (line   21)
53235* language dialect options:              C Dialect Options.  (line    6)
53236* LC_ALL:                                Environment Variables.
53237                                                             (line   21)
53238* LC_CTYPE:                              Environment Variables.
53239                                                             (line   21)
53240* LC_MESSAGES:                           Environment Variables.
53241                                                             (line   21)
53242* ldexp:                                 Other Builtins.     (line    6)
53243* ldexpf:                                Other Builtins.     (line    6)
53244* ldexpl:                                Other Builtins.     (line    6)
53245* leaf function attribute:               Function Attributes.
53246                                                             (line  771)
53247* length-zero arrays:                    Zero Length.        (line    6)
53248* lgamma:                                Other Builtins.     (line    6)
53249* lgamma_r:                              Other Builtins.     (line    6)
53250* lgammaf:                               Other Builtins.     (line    6)
53251* lgammaf_r:                             Other Builtins.     (line    6)
53252* lgammal:                               Other Builtins.     (line    6)
53253* lgammal_r:                             Other Builtins.     (line    6)
53254* Libraries:                             Link Options.       (line   24)
53255* LIBRARY_PATH:                          Environment Variables.
53256                                                             (line   97)
53257* link options:                          Link Options.       (line    6)
53258* linker script:                         Link Options.       (line  199)
53259* LK fixed-suffix:                       Fixed-Point.        (line    6)
53260* lk fixed-suffix:                       Fixed-Point.        (line    6)
53261* LL integer suffix:                     Long Long.          (line    6)
53262* llabs:                                 Other Builtins.     (line    6)
53263* LLK fixed-suffix:                      Fixed-Point.        (line    6)
53264* llk fixed-suffix:                      Fixed-Point.        (line    6)
53265* LLR fixed-suffix:                      Fixed-Point.        (line    6)
53266* llr fixed-suffix:                      Fixed-Point.        (line    6)
53267* llrint:                                Other Builtins.     (line    6)
53268* llrintf:                               Other Builtins.     (line    6)
53269* llrintl:                               Other Builtins.     (line    6)
53270* llround:                               Other Builtins.     (line    6)
53271* llroundf:                              Other Builtins.     (line    6)
53272* llroundl:                              Other Builtins.     (line    6)
53273* LM32 options:                          LM32 Options.       (line    6)
53274* load address instruction:              Simple Constraints. (line  154)
53275* local labels:                          Local Labels.       (line    6)
53276* local variables in macros:             Typeof.             (line   46)
53277* local variables, specifying registers: Local Reg Vars.     (line    6)
53278* locale:                                Environment Variables.
53279                                                             (line   21)
53280* locale definition:                     Environment Variables.
53281                                                             (line  106)
53282* log:                                   Other Builtins.     (line    6)
53283* log10:                                 Other Builtins.     (line    6)
53284* log10f:                                Other Builtins.     (line    6)
53285* log10l:                                Other Builtins.     (line    6)
53286* log1p:                                 Other Builtins.     (line    6)
53287* log1pf:                                Other Builtins.     (line    6)
53288* log1pl:                                Other Builtins.     (line    6)
53289* log2:                                  Other Builtins.     (line    6)
53290* log2f:                                 Other Builtins.     (line    6)
53291* log2l:                                 Other Builtins.     (line    6)
53292* logb:                                  Other Builtins.     (line    6)
53293* logbf:                                 Other Builtins.     (line    6)
53294* logbl:                                 Other Builtins.     (line    6)
53295* logf:                                  Other Builtins.     (line    6)
53296* logl:                                  Other Builtins.     (line    6)
53297* long long data types:                  Long Long.          (line    6)
53298* longjmp:                               Global Reg Vars.    (line   65)
53299* longjmp incompatibilities:             Incompatibilities.  (line   39)
53300* longjmp warnings:                      Warning Options.    (line  674)
53301* LR fixed-suffix:                       Fixed-Point.        (line    6)
53302* lr fixed-suffix:                       Fixed-Point.        (line    6)
53303* lrint:                                 Other Builtins.     (line    6)
53304* lrintf:                                Other Builtins.     (line    6)
53305* lrintl:                                Other Builtins.     (line    6)
53306* lround:                                Other Builtins.     (line    6)
53307* lroundf:                               Other Builtins.     (line    6)
53308* lroundl:                               Other Builtins.     (line    6)
53309* m in constraint:                       Simple Constraints. (line   17)
53310* M32C options:                          M32C Options.       (line    6)
53311* M32R/D options:                        M32R/D Options.     (line    6)
53312* M680x0 options:                        M680x0 Options.     (line    6)
53313* machine dependent options:             Submodel Options.   (line    6)
53314* machine specific constraints:          Machine Constraints.
53315                                                             (line    6)
53316* macro with variable arguments:         Variadic Macros.    (line    6)
53317* macros containing asm:                 Extended Asm.       (line  238)
53318* macros, inline alternative:            Inline.             (line    6)
53319* macros, local labels:                  Local Labels.       (line    6)
53320* macros, local variables in:            Typeof.             (line   46)
53321* macros, statements in expressions:     Statement Exprs.    (line    6)
53322* macros, types of arguments:            Typeof.             (line    6)
53323* make:                                  Preprocessor Options.
53324                                                             (line  185)
53325* malloc:                                Other Builtins.     (line    6)
53326* malloc attribute:                      Function Attributes.
53327                                                             (line  830)
53328* matching constraint:                   Simple Constraints. (line  139)
53329* MCore options:                         MCore Options.      (line    6)
53330* member fns, automatically inline:      Inline.             (line   71)
53331* memchr:                                Other Builtins.     (line    6)
53332* memcmp:                                Other Builtins.     (line    6)
53333* memcpy:                                Other Builtins.     (line    6)
53334* memory references in constraints:      Simple Constraints. (line   17)
53335* mempcpy:                               Other Builtins.     (line    6)
53336* memset:                                Other Builtins.     (line    6)
53337* MeP options:                           MeP Options.        (line    6)
53338* Mercury:                               G++ and GCC.        (line   23)
53339* message formatting:                    Language Independent Options.
53340                                                             (line    6)
53341* messages, warning:                     Warning Options.    (line    6)
53342* messages, warning and error:           Warnings and Errors.
53343                                                             (line    6)
53344* MicroBlaze Options:                    MicroBlaze Options. (line    6)
53345* middle-operands, omitted:              Conditionals.       (line    6)
53346* MIPS options:                          MIPS Options.       (line    6)
53347* mips16 attribute:                      Function Attributes.
53348                                                             (line  839)
53349* misunderstandings in C++:              C++ Misunderstandings.
53350                                                             (line    6)
53351* mixed declarations and code:           Mixed Declarations. (line    6)
53352* mktemp, and constant strings:          Incompatibilities.  (line   13)
53353* MMIX Options:                          MMIX Options.       (line    6)
53354* MN10300 options:                       MN10300 Options.    (line    6)
53355* mode attribute:                        Variable Attributes.
53356                                                             (line  134)
53357* modf:                                  Other Builtins.     (line    6)
53358* modff:                                 Other Builtins.     (line    6)
53359* modfl:                                 Other Builtins.     (line    6)
53360* modifiers in constraints:              Modifiers.          (line    6)
53361* Moxie Options:                         Moxie Options.      (line    6)
53362* ms_abi attribute:                      Function Attributes.
53363                                                             (line  881)
53364* ms_hook_prologue attribute:            Function Attributes.
53365                                                             (line  906)
53366* ms_struct:                             Type Attributes.    (line  324)
53367* ms_struct attribute:                   Variable Attributes.
53368                                                             (line  445)
53369* mudflap:                               Optimize Options.   (line  407)
53370* multiple alternative constraints:      Multi-Alternative.  (line    6)
53371* multiprecision arithmetic:             Long Long.          (line    6)
53372* n in constraint:                       Simple Constraints. (line   75)
53373* Named Address Spaces:                  Named Address Spaces.
53374                                                             (line    6)
53375* names used in assembler code:          Asm Labels.         (line    6)
53376* naming convention, implementation headers: C++ Interface.  (line   46)
53377* nearbyint:                             Other Builtins.     (line    6)
53378* nearbyintf:                            Other Builtins.     (line    6)
53379* nearbyintl:                            Other Builtins.     (line    6)
53380* nested functions:                      Nested Functions.   (line    6)
53381* newlines (escaped):                    Escaped Newlines.   (line    6)
53382* nextafter:                             Other Builtins.     (line    6)
53383* nextafterf:                            Other Builtins.     (line    6)
53384* nextafterl:                            Other Builtins.     (line    6)
53385* nexttoward:                            Other Builtins.     (line    6)
53386* nexttowardf:                           Other Builtins.     (line    6)
53387* nexttowardl:                           Other Builtins.     (line    6)
53388* NFC:                                   Warning Options.    (line 1284)
53389* NFKC:                                  Warning Options.    (line 1284)
53390* NMI handler functions on the Blackfin processor: Function Attributes.
53391                                                             (line  952)
53392* no_instrument_function function attribute: Function Attributes.
53393                                                             (line  958)
53394* no_sanitize_address function attribute: Function Attributes.
53395                                                             (line 1198)
53396* no_split_stack function attribute:     Function Attributes.
53397                                                             (line  963)
53398* noclone function attribute:            Function Attributes.
53399                                                             (line  980)
53400* nocommon attribute:                    Variable Attributes.
53401                                                             (line  105)
53402* noinline function attribute:           Function Attributes.
53403                                                             (line  969)
53404* nomips16 attribute:                    Function Attributes.
53405                                                             (line  839)
53406* non-constant initializers:             Initializers.       (line    6)
53407* non-static inline function:            Inline.             (line   85)
53408* nonnull function attribute:            Function Attributes.
53409                                                             (line  986)
53410* noreturn function attribute:           Function Attributes.
53411                                                             (line 1010)
53412* nosave_low_regs attribute:             Function Attributes.
53413                                                             (line 1060)
53414* nothrow function attribute:            Function Attributes.
53415                                                             (line 1052)
53416* o in constraint:                       Simple Constraints. (line   23)
53417* OBJC_INCLUDE_PATH:                     Environment Variables.
53418                                                             (line  132)
53419* Objective-C <1>:                       Standards.          (line  163)
53420* Objective-C:                           G++ and GCC.        (line    6)
53421* Objective-C and Objective-C++ options, command-line: Objective-C and Objective-C++ Dialect Options.
53422                                                             (line    6)
53423* Objective-C++ <1>:                     Standards.          (line  163)
53424* Objective-C++:                         G++ and GCC.        (line    6)
53425* offsettable address:                   Simple Constraints. (line   23)
53426* old-style function definitions:        Function Prototypes.
53427                                                             (line    6)
53428* omitted middle-operands:               Conditionals.       (line    6)
53429* open coding:                           Inline.             (line    6)
53430* OpenMP parallel:                       C Dialect Options.  (line  256)
53431* operand constraints, asm:              Constraints.        (line    6)
53432* optimize function attribute:           Function Attributes.
53433                                                             (line 1066)
53434* optimize options:                      Optimize Options.   (line    6)
53435* options to control diagnostics formatting: Language Independent Options.
53436                                                             (line    6)
53437* options to control warnings:           Warning Options.    (line    6)
53438* options, C++:                          C++ Dialect Options.
53439                                                             (line    6)
53440* options, code generation:              Code Gen Options.   (line    6)
53441* options, debugging:                    Debugging Options.  (line    6)
53442* options, dialect:                      C Dialect Options.  (line    6)
53443* options, directory search:             Directory Options.  (line    6)
53444* options, GCC command:                  Invoking GCC.       (line    6)
53445* options, grouping:                     Invoking GCC.       (line   26)
53446* options, linking:                      Link Options.       (line    6)
53447* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
53448                                                             (line    6)
53449* options, optimization:                 Optimize Options.   (line    6)
53450* options, order:                        Invoking GCC.       (line   30)
53451* options, preprocessor:                 Preprocessor Options.
53452                                                             (line    6)
53453* order of evaluation, side effects:     Non-bugs.           (line  196)
53454* order of options:                      Invoking GCC.       (line   30)
53455* OS_main AVR function attribute:        Function Attributes.
53456                                                             (line 1083)
53457* OS_task AVR function attribute:        Function Attributes.
53458                                                             (line 1083)
53459* other register constraints:            Simple Constraints. (line  163)
53460* output file option:                    Overall Options.    (line  191)
53461* overloaded virtual function, warning:  C++ Dialect Options.
53462                                                             (line  618)
53463* p in constraint:                       Simple Constraints. (line  154)
53464* packed attribute:                      Variable Attributes.
53465                                                             (line  145)
53466* parameter forward declaration:         Variable Length.    (line   59)
53467* Pascal:                                G++ and GCC.        (line   23)
53468* pcs function attribute:                Function Attributes.
53469                                                             (line 1108)
53470* PDP-11 Options:                        PDP-11 Options.     (line    6)
53471* PIC:                                   Code Gen Options.   (line  280)
53472* picoChip options:                      picoChip Options.   (line    6)
53473* pmf:                                   Bound member functions.
53474                                                             (line    6)
53475* pointer arguments:                     Function Attributes.
53476                                                             (line  188)
53477* pointer to member function:            Bound member functions.
53478                                                             (line    6)
53479* portions of temporary objects, pointers to: Temporaries.   (line    6)
53480* pow:                                   Other Builtins.     (line    6)
53481* pow10:                                 Other Builtins.     (line    6)
53482* pow10f:                                Other Builtins.     (line    6)
53483* pow10l:                                Other Builtins.     (line    6)
53484* PowerPC options:                       PowerPC Options.    (line    6)
53485* powf:                                  Other Builtins.     (line    6)
53486* powl:                                  Other Builtins.     (line    6)
53487* pragma GCC optimize:                   Function Specific Option Pragmas.
53488                                                             (line   21)
53489* pragma GCC pop_options:                Function Specific Option Pragmas.
53490                                                             (line   34)
53491* pragma GCC push_options:               Function Specific Option Pragmas.
53492                                                             (line   34)
53493* pragma GCC reset_options:              Function Specific Option Pragmas.
53494                                                             (line   44)
53495* pragma GCC target:                     Function Specific Option Pragmas.
53496                                                             (line    7)
53497* pragma, address:                       M32C Pragmas.       (line   15)
53498* pragma, align:                         Solaris Pragmas.    (line   11)
53499* pragma, call:                          MeP Pragmas.        (line   48)
53500* pragma, coprocessor available:         MeP Pragmas.        (line   13)
53501* pragma, coprocessor call_saved:        MeP Pragmas.        (line   20)
53502* pragma, coprocessor subclass:          MeP Pragmas.        (line   28)
53503* pragma, custom io_volatile:            MeP Pragmas.        (line    7)
53504* pragma, diagnostic:                    Diagnostic Pragmas. (line   14)
53505* pragma, disinterrupt:                  MeP Pragmas.        (line   38)
53506* pragma, fini:                          Solaris Pragmas.    (line   19)
53507* pragma, init:                          Solaris Pragmas.    (line   24)
53508* pragma, long_calls:                    ARM Pragmas.        (line   11)
53509* pragma, long_calls_off:                ARM Pragmas.        (line   17)
53510* pragma, longcall:                      RS/6000 and PowerPC Pragmas.
53511                                                             (line   14)
53512* pragma, mark:                          Darwin Pragmas.     (line   11)
53513* pragma, memregs:                       M32C Pragmas.       (line    7)
53514* pragma, no_long_calls:                 ARM Pragmas.        (line   14)
53515* pragma, options align:                 Darwin Pragmas.     (line   14)
53516* pragma, pop_macro:                     Push/Pop Macro Pragmas.
53517                                                             (line   15)
53518* pragma, push_macro:                    Push/Pop Macro Pragmas.
53519                                                             (line   11)
53520* pragma, reason for not using:          Function Attributes.
53521                                                             (line 1882)
53522* pragma, redefine_extname:              Symbol-Renaming Pragmas.
53523                                                             (line   12)
53524* pragma, segment:                       Darwin Pragmas.     (line   21)
53525* pragma, unused:                        Darwin Pragmas.     (line   24)
53526* pragma, visibility:                    Visibility Pragmas. (line    8)
53527* pragma, weak:                          Weak Pragmas.       (line   10)
53528* pragmas:                               Pragmas.            (line    6)
53529* pragmas in C++, effect on inlining:    C++ Interface.      (line   66)
53530* pragmas, interface and implementation: C++ Interface.      (line    6)
53531* pragmas, warning of unknown:           Warning Options.    (line  691)
53532* precompiled headers:                   Precompiled Headers.
53533                                                             (line    6)
53534* preprocessing numbers:                 Incompatibilities.  (line  173)
53535* preprocessing tokens:                  Incompatibilities.  (line  173)
53536* preprocessor options:                  Preprocessor Options.
53537                                                             (line    6)
53538* printf:                                Other Builtins.     (line    6)
53539* printf_unlocked:                       Other Builtins.     (line    6)
53540* prof:                                  Debugging Options.  (line  327)
53541* progmem AVR variable attribute:        Variable Attributes.
53542                                                             (line  318)
53543* promotion of formal parameters:        Function Prototypes.
53544                                                             (line    6)
53545* pure function attribute:               Function Attributes.
53546                                                             (line 1126)
53547* push address instruction:              Simple Constraints. (line  154)
53548* putchar:                               Other Builtins.     (line    6)
53549* puts:                                  Other Builtins.     (line    6)
53550* Q floating point suffix:               Floating Types.     (line    6)
53551* q floating point suffix:               Floating Types.     (line    6)
53552* qsort, and global register variables:  Global Reg Vars.    (line   41)
53553* question mark:                         Multi-Alternative.  (line   27)
53554* R fixed-suffix:                        Fixed-Point.        (line    6)
53555* r fixed-suffix:                        Fixed-Point.        (line    6)
53556* r in constraint:                       Simple Constraints. (line   66)
53557* RAMPD:                                 AVR Options.        (line  336)
53558* RAMPX:                                 AVR Options.        (line  336)
53559* RAMPY:                                 AVR Options.        (line  336)
53560* RAMPZ:                                 AVR Options.        (line  336)
53561* ranges in case statements:             Case Ranges.        (line    6)
53562* read-only strings:                     Incompatibilities.  (line    9)
53563* register variable after longjmp:       Global Reg Vars.    (line   65)
53564* registers:                             Extended Asm.       (line    6)
53565* registers for local variables:         Local Reg Vars.     (line    6)
53566* registers in constraints:              Simple Constraints. (line   66)
53567* registers, global allocation:          Explicit Reg Vars.  (line    6)
53568* registers, global variables in:        Global Reg Vars.    (line    6)
53569* regparm attribute:                     Function Attributes.
53570                                                             (line 1206)
53571* relocation truncated to fit (ColdFire): M680x0 Options.    (line  329)
53572* relocation truncated to fit (MIPS):    MIPS Options.       (line  200)
53573* remainder:                             Other Builtins.     (line    6)
53574* remainderf:                            Other Builtins.     (line    6)
53575* remainderl:                            Other Builtins.     (line    6)
53576* remquo:                                Other Builtins.     (line    6)
53577* remquof:                               Other Builtins.     (line    6)
53578* remquol:                               Other Builtins.     (line    6)
53579* renesas attribute:                     Function Attributes.
53580                                                             (line 1238)
53581* reordering, warning:                   C++ Dialect Options.
53582                                                             (line  533)
53583* reporting bugs:                        Bugs.               (line    6)
53584* resbank attribute:                     Function Attributes.
53585                                                             (line 1242)
53586* rest argument (in macro):              Variadic Macros.    (line    6)
53587* restricted pointers:                   Restricted Pointers.
53588                                                             (line    6)
53589* restricted references:                 Restricted Pointers.
53590                                                             (line    6)
53591* restricted this pointer:               Restricted Pointers.
53592                                                             (line    6)
53593* returns_twice attribute:               Function Attributes.
53594                                                             (line 1256)
53595* rindex:                                Other Builtins.     (line    6)
53596* rint:                                  Other Builtins.     (line    6)
53597* rintf:                                 Other Builtins.     (line    6)
53598* rintl:                                 Other Builtins.     (line    6)
53599* RL78 Options:                          RL78 Options.       (line    6)
53600* round:                                 Other Builtins.     (line    6)
53601* roundf:                                Other Builtins.     (line    6)
53602* roundl:                                Other Builtins.     (line    6)
53603* RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
53604                                                             (line    6)
53605* RTTI:                                  Vague Linkage.      (line   42)
53606* run-time options:                      Code Gen Options.   (line    6)
53607* RX Options:                            RX Options.         (line    6)
53608* s in constraint:                       Simple Constraints. (line  102)
53609* S/390 and zSeries Options:             S/390 and zSeries Options.
53610                                                             (line    6)
53611* save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes.
53612                                                             (line 1265)
53613* save volatile registers on the MicroBlaze: Function Attributes.
53614                                                             (line 1270)
53615* scalb:                                 Other Builtins.     (line    6)
53616* scalbf:                                Other Builtins.     (line    6)
53617* scalbl:                                Other Builtins.     (line    6)
53618* scalbln:                               Other Builtins.     (line    6)
53619* scalblnf:                              Other Builtins.     (line    6)
53620* scalbn:                                Other Builtins.     (line    6)
53621* scalbnf:                               Other Builtins.     (line    6)
53622* scanf, and constant strings:           Incompatibilities.  (line   17)
53623* scanfnl:                               Other Builtins.     (line    6)
53624* scope of a variable length array:      Variable Length.    (line   22)
53625* scope of declaration:                  Disappointments.    (line   21)
53626* scope of external declarations:        Incompatibilities.  (line   80)
53627* Score Options:                         Score Options.      (line    6)
53628* search path:                           Directory Options.  (line    6)
53629* section function attribute:            Function Attributes.
53630                                                             (line 1278)
53631* section variable attribute:            Variable Attributes.
53632                                                             (line  166)
53633* sentinel function attribute:           Function Attributes.
53634                                                             (line 1294)
53635* setjmp:                                Global Reg Vars.    (line   65)
53636* setjmp incompatibilities:              Incompatibilities.  (line   39)
53637* shared strings:                        Incompatibilities.  (line    9)
53638* shared variable attribute:             Variable Attributes.
53639                                                             (line  211)
53640* side effect in ?::                     Conditionals.       (line   20)
53641* side effects, macro argument:          Statement Exprs.    (line   35)
53642* side effects, order of evaluation:     Non-bugs.           (line  196)
53643* signbit:                               Other Builtins.     (line    6)
53644* signbitd128:                           Other Builtins.     (line    6)
53645* signbitd32:                            Other Builtins.     (line    6)
53646* signbitd64:                            Other Builtins.     (line    6)
53647* signbitf:                              Other Builtins.     (line    6)
53648* signbitl:                              Other Builtins.     (line    6)
53649* signed and unsigned values, comparison warning: Warning Options.
53650                                                             (line 1156)
53651* significand:                           Other Builtins.     (line    6)
53652* significandf:                          Other Builtins.     (line    6)
53653* significandl:                          Other Builtins.     (line    6)
53654* simple constraints:                    Simple Constraints. (line    6)
53655* sin:                                   Other Builtins.     (line    6)
53656* sincos:                                Other Builtins.     (line    6)
53657* sincosf:                               Other Builtins.     (line    6)
53658* sincosl:                               Other Builtins.     (line    6)
53659* sinf:                                  Other Builtins.     (line    6)
53660* sinh:                                  Other Builtins.     (line    6)
53661* sinhf:                                 Other Builtins.     (line    6)
53662* sinhl:                                 Other Builtins.     (line    6)
53663* sinl:                                  Other Builtins.     (line    6)
53664* sizeof:                                Typeof.             (line    6)
53665* smaller data references:               M32R/D Options.     (line   57)
53666* smaller data references (PowerPC):     RS/6000 and PowerPC Options.
53667                                                             (line  745)
53668* snprintf:                              Other Builtins.     (line    6)
53669* Solaris 2 options:                     Solaris 2 Options.  (line    6)
53670* sp_switch attribute:                   Function Attributes.
53671                                                             (line 1343)
53672* SPARC options:                         SPARC Options.      (line    6)
53673* Spec Files:                            Spec Files.         (line    6)
53674* specified registers:                   Explicit Reg Vars.  (line    6)
53675* specifying compiler version and target machine: Target Options.
53676                                                             (line    6)
53677* specifying hardware config:            Submodel Options.   (line    6)
53678* specifying machine version:            Target Options.     (line    6)
53679* specifying registers for local variables: Local Reg Vars.  (line    6)
53680* speed of compilation:                  Precompiled Headers.
53681                                                             (line    6)
53682* sprintf:                               Other Builtins.     (line    6)
53683* SPU options:                           SPU Options.        (line    6)
53684* sqrt:                                  Other Builtins.     (line    6)
53685* sqrtf:                                 Other Builtins.     (line    6)
53686* sqrtl:                                 Other Builtins.     (line    6)
53687* sscanf:                                Other Builtins.     (line    6)
53688* sscanf, and constant strings:          Incompatibilities.  (line   17)
53689* sseregparm attribute:                  Function Attributes.
53690                                                             (line 1223)
53691* statements inside expressions:         Statement Exprs.    (line    6)
53692* static data in C++, declaring and defining: Static Definitions.
53693                                                             (line    6)
53694* stpcpy:                                Other Builtins.     (line    6)
53695* stpncpy:                               Other Builtins.     (line    6)
53696* strcasecmp:                            Other Builtins.     (line    6)
53697* strcat:                                Other Builtins.     (line    6)
53698* strchr:                                Other Builtins.     (line    6)
53699* strcmp:                                Other Builtins.     (line    6)
53700* strcpy:                                Other Builtins.     (line    6)
53701* strcspn:                               Other Builtins.     (line    6)
53702* strdup:                                Other Builtins.     (line    6)
53703* strfmon:                               Other Builtins.     (line    6)
53704* strftime:                              Other Builtins.     (line    6)
53705* string constants:                      Incompatibilities.  (line    9)
53706* strlen:                                Other Builtins.     (line    6)
53707* strncasecmp:                           Other Builtins.     (line    6)
53708* strncat:                               Other Builtins.     (line    6)
53709* strncmp:                               Other Builtins.     (line    6)
53710* strncpy:                               Other Builtins.     (line    6)
53711* strndup:                               Other Builtins.     (line    6)
53712* strpbrk:                               Other Builtins.     (line    6)
53713* strrchr:                               Other Builtins.     (line    6)
53714* strspn:                                Other Builtins.     (line    6)
53715* strstr:                                Other Builtins.     (line    6)
53716* struct:                                Unnamed Fields.     (line    6)
53717* struct __htm_tdb:                      S/390 System z Built-in Functions.
53718                                                             (line   54)
53719* structures:                            Incompatibilities.  (line  146)
53720* structures, constructor expression:    Compound Literals.  (line    6)
53721* submodel options:                      Submodel Options.   (line    6)
53722* subscripting:                          Subscripting.       (line    6)
53723* subscripting and function values:      Subscripting.       (line    6)
53724* suffixes for C++ source:               Invoking G++.       (line    6)
53725* SUNPRO_DEPENDENCIES:                   Environment Variables.
53726                                                             (line  172)
53727* suppressing warnings:                  Warning Options.    (line    6)
53728* surprises in C++:                      C++ Misunderstandings.
53729                                                             (line    6)
53730* syntax checking:                       Warning Options.    (line   13)
53731* syscall_linkage attribute:             Function Attributes.
53732                                                             (line 1358)
53733* system headers, warnings from:         Warning Options.    (line  843)
53734* sysv_abi attribute:                    Function Attributes.
53735                                                             (line  881)
53736* tan:                                   Other Builtins.     (line    6)
53737* tanf:                                  Other Builtins.     (line    6)
53738* tanh:                                  Other Builtins.     (line    6)
53739* tanhf:                                 Other Builtins.     (line    6)
53740* tanhl:                                 Other Builtins.     (line    6)
53741* tanl:                                  Other Builtins.     (line    6)
53742* target function attribute:             Function Attributes.
53743                                                             (line 1365)
53744* target machine, specifying:            Target Options.     (line    6)
53745* target options:                        Target Options.     (line    6)
53746* target("abm") attribute:               Function Attributes.
53747                                                             (line 1391)
53748* target("aes") attribute:               Function Attributes.
53749                                                             (line 1396)
53750* target("align-stringops") attribute:   Function Attributes.
53751                                                             (line 1490)
53752* target("altivec") attribute:           Function Attributes.
53753                                                             (line 1516)
53754* target("arch=ARCH") attribute:         Function Attributes.
53755                                                             (line 1499)
53756* target("avoid-indexed-addresses") attribute: Function Attributes.
53757                                                             (line 1637)
53758* target("cld") attribute:               Function Attributes.
53759                                                             (line 1461)
53760* target("cmpb") attribute:              Function Attributes.
53761                                                             (line 1522)
53762* target("cpu=CPU") attribute:           Function Attributes.
53763                                                             (line 1652)
53764* target("default") attribute:           Function Attributes.
53765                                                             (line 1399)
53766* target("dlmzb") attribute:             Function Attributes.
53767                                                             (line 1528)
53768* target("fancy-math-387") attribute:    Function Attributes.
53769                                                             (line 1465)
53770* target("fma4") attribute:              Function Attributes.
53771                                                             (line 1445)
53772* target("fpmath=FPMATH") attribute:     Function Attributes.
53773                                                             (line 1507)
53774* target("fprnd") attribute:             Function Attributes.
53775                                                             (line 1535)
53776* target("friz") attribute:              Function Attributes.
53777                                                             (line 1628)
53778* target("fused-madd") attribute:        Function Attributes.
53779                                                             (line 1470)
53780* target("hard-dfp") attribute:          Function Attributes.
53781                                                             (line 1541)
53782* target("ieee-fp") attribute:           Function Attributes.
53783                                                             (line 1475)
53784* target("inline-all-stringops") attribute: Function Attributes.
53785                                                             (line 1480)
53786* target("inline-stringops-dynamically") attribute: Function Attributes.
53787                                                             (line 1484)
53788* target("isel") attribute:              Function Attributes.
53789                                                             (line 1547)
53790* target("longcall") attribute:          Function Attributes.
53791                                                             (line 1647)
53792* target("lwp") attribute:               Function Attributes.
53793                                                             (line 1453)
53794* target("mfcrf") attribute:             Function Attributes.
53795                                                             (line 1551)
53796* target("mfpgpr") attribute:            Function Attributes.
53797                                                             (line 1558)
53798* target("mmx") attribute:               Function Attributes.
53799                                                             (line 1404)
53800* target("mulhw") attribute:             Function Attributes.
53801                                                             (line 1565)
53802* target("multiple") attribute:          Function Attributes.
53803                                                             (line 1572)
53804* target("paired") attribute:            Function Attributes.
53805                                                             (line 1642)
53806* target("pclmul") attribute:            Function Attributes.
53807                                                             (line 1408)
53808* target("popcnt") attribute:            Function Attributes.
53809                                                             (line 1412)
53810* target("popcntb") attribute:           Function Attributes.
53811                                                             (line 1583)
53812* target("popcntd") attribute:           Function Attributes.
53813                                                             (line 1590)
53814* target("powerpc-gfxopt") attribute:    Function Attributes.
53815                                                             (line 1596)
53816* target("powerpc-gpopt") attribute:     Function Attributes.
53817                                                             (line 1602)
53818* target("recip") attribute:             Function Attributes.
53819                                                             (line 1494)
53820* target("recip-precision") attribute:   Function Attributes.
53821                                                             (line 1608)
53822* target("sse") attribute:               Function Attributes.
53823                                                             (line 1416)
53824* target("sse2") attribute:              Function Attributes.
53825                                                             (line 1420)
53826* target("sse3") attribute:              Function Attributes.
53827                                                             (line 1424)
53828* target("sse4") attribute:              Function Attributes.
53829                                                             (line 1428)
53830* target("sse4.1") attribute:            Function Attributes.
53831                                                             (line 1433)
53832* target("sse4.2") attribute:            Function Attributes.
53833                                                             (line 1437)
53834* target("sse4a") attribute:             Function Attributes.
53835                                                             (line 1441)
53836* target("ssse3") attribute:             Function Attributes.
53837                                                             (line 1457)
53838* target("string") attribute:            Function Attributes.
53839                                                             (line 1614)
53840* target("tune=TUNE") attribute:         Function Attributes.
53841                                                             (line 1503)
53842* target("update") attribute:            Function Attributes.
53843                                                             (line 1577)
53844* target("vsx") attribute:               Function Attributes.
53845                                                             (line 1620)
53846* target("xop") attribute:               Function Attributes.
53847                                                             (line 1449)
53848* TC1:                                   Standards.          (line   13)
53849* TC2:                                   Standards.          (line   13)
53850* TC3:                                   Standards.          (line   13)
53851* Technical Corrigenda:                  Standards.          (line   13)
53852* Technical Corrigendum 1:               Standards.          (line   13)
53853* Technical Corrigendum 2:               Standards.          (line   13)
53854* Technical Corrigendum 3:               Standards.          (line   13)
53855* template instantiation:                Template Instantiation.
53856                                                             (line    6)
53857* temporaries, lifetime of:              Temporaries.        (line    6)
53858* tgamma:                                Other Builtins.     (line    6)
53859* tgammaf:                               Other Builtins.     (line    6)
53860* tgammal:                               Other Builtins.     (line    6)
53861* Thread-Local Storage:                  Thread-Local.       (line    6)
53862* thunks:                                Nested Functions.   (line    6)
53863* TILE-Gx options:                       TILE-Gx Options.    (line    6)
53864* TILEPro options:                       TILEPro Options.    (line    6)
53865* tiny data section on the H8/300H and H8S: Function Attributes.
53866                                                             (line 1681)
53867* TLS:                                   Thread-Local.       (line    6)
53868* tls_model attribute:                   Variable Attributes.
53869                                                             (line  235)
53870* TMPDIR:                                Environment Variables.
53871                                                             (line   45)
53872* toascii:                               Other Builtins.     (line    6)
53873* tolower:                               Other Builtins.     (line    6)
53874* toupper:                               Other Builtins.     (line    6)
53875* towlower:                              Other Builtins.     (line    6)
53876* towupper:                              Other Builtins.     (line    6)
53877* traditional C language:                C Dialect Options.  (line  307)
53878* trap_exit attribute:                   Function Attributes.
53879                                                             (line 1688)
53880* trapa_handler attribute:               Function Attributes.
53881                                                             (line 1693)
53882* trunc:                                 Other Builtins.     (line    6)
53883* truncf:                                Other Builtins.     (line    6)
53884* truncl:                                Other Builtins.     (line    6)
53885* two-stage name lookup:                 Name lookup.        (line    6)
53886* type alignment:                        Alignment.          (line    6)
53887* type attributes:                       Type Attributes.    (line    6)
53888* type_info:                             Vague Linkage.      (line   42)
53889* typedef names as function parameters:  Incompatibilities.  (line   97)
53890* typeof:                                Typeof.             (line    6)
53891* UHK fixed-suffix:                      Fixed-Point.        (line    6)
53892* uhk fixed-suffix:                      Fixed-Point.        (line    6)
53893* UHR fixed-suffix:                      Fixed-Point.        (line    6)
53894* uhr fixed-suffix:                      Fixed-Point.        (line    6)
53895* UK fixed-suffix:                       Fixed-Point.        (line    6)
53896* uk fixed-suffix:                       Fixed-Point.        (line    6)
53897* ULK fixed-suffix:                      Fixed-Point.        (line    6)
53898* ulk fixed-suffix:                      Fixed-Point.        (line    6)
53899* ULL integer suffix:                    Long Long.          (line    6)
53900* ULLK fixed-suffix:                     Fixed-Point.        (line    6)
53901* ullk fixed-suffix:                     Fixed-Point.        (line    6)
53902* ULLR fixed-suffix:                     Fixed-Point.        (line    6)
53903* ullr fixed-suffix:                     Fixed-Point.        (line    6)
53904* ULR fixed-suffix:                      Fixed-Point.        (line    6)
53905* ulr fixed-suffix:                      Fixed-Point.        (line    6)
53906* undefined behavior:                    Bug Criteria.       (line   17)
53907* undefined function value:              Bug Criteria.       (line   17)
53908* underscores in variables in macros:    Typeof.             (line   46)
53909* union:                                 Unnamed Fields.     (line    6)
53910* union, casting to a:                   Cast to Union.      (line    6)
53911* unions:                                Incompatibilities.  (line  146)
53912* unknown pragmas, warning:              Warning Options.    (line  691)
53913* unresolved references and -nodefaultlibs: Link Options.    (line   85)
53914* unresolved references and -nostdlib:   Link Options.       (line   85)
53915* unused attribute.:                     Function Attributes.
53916                                                             (line 1697)
53917* UR fixed-suffix:                       Fixed-Point.        (line    6)
53918* ur fixed-suffix:                       Fixed-Point.        (line    6)
53919* use_debug_exception_return attribute:  Function Attributes.
53920                                                             (line  712)
53921* use_shadow_register_set attribute:     Function Attributes.
53922                                                             (line  703)
53923* used attribute.:                       Function Attributes.
53924                                                             (line 1702)
53925* User stack pointer in interrupts on the Blackfin: Function Attributes.
53926                                                             (line  754)
53927* V in constraint:                       Simple Constraints. (line   43)
53928* V850 Options:                          V850 Options.       (line    6)
53929* vague linkage:                         Vague Linkage.      (line    6)
53930* value after longjmp:                   Global Reg Vars.    (line   65)
53931* variable addressability on the IA-64:  Function Attributes.
53932                                                             (line  853)
53933* variable addressability on the M32R/D: Variable Attributes.
53934                                                             (line  374)
53935* variable alignment:                    Alignment.          (line    6)
53936* variable attributes:                   Variable Attributes.
53937                                                             (line    6)
53938* variable number of arguments:          Variadic Macros.    (line    6)
53939* variable-length array scope:           Variable Length.    (line   22)
53940* variable-length arrays:                Variable Length.    (line    6)
53941* variables in specified registers:      Explicit Reg Vars.  (line    6)
53942* variables, local, in macros:           Typeof.             (line   46)
53943* variadic macros:                       Variadic Macros.    (line    6)
53944* VAX options:                           VAX Options.        (line    6)
53945* version_id attribute:                  Function Attributes.
53946                                                             (line 1712)
53947* vfprintf:                              Other Builtins.     (line    6)
53948* vfscanf:                               Other Builtins.     (line    6)
53949* visibility attribute:                  Function Attributes.
53950                                                             (line 1722)
53951* VLAs:                                  Variable Length.    (line    6)
53952* vliw attribute:                        Function Attributes.
53953                                                             (line 1815)
53954* void pointers, arithmetic:             Pointer Arith.      (line    6)
53955* void, size of pointer to:              Pointer Arith.      (line    6)
53956* volatile access <1>:                   C++ Volatiles.      (line    6)
53957* volatile access:                       Volatiles.          (line    6)
53958* volatile applied to function:          Function Attributes.
53959                                                             (line    6)
53960* volatile read <1>:                     C++ Volatiles.      (line    6)
53961* volatile read:                         Volatiles.          (line    6)
53962* volatile write <1>:                    C++ Volatiles.      (line    6)
53963* volatile write:                        Volatiles.          (line    6)
53964* vprintf:                               Other Builtins.     (line    6)
53965* vscanf:                                Other Builtins.     (line    6)
53966* vsnprintf:                             Other Builtins.     (line    6)
53967* vsprintf:                              Other Builtins.     (line    6)
53968* vsscanf:                               Other Builtins.     (line    6)
53969* vtable:                                Vague Linkage.      (line   27)
53970* VxWorks Options:                       VxWorks Options.    (line    6)
53971* W floating point suffix:               Floating Types.     (line    6)
53972* w floating point suffix:               Floating Types.     (line    6)
53973* warn_unused_result attribute:          Function Attributes.
53974                                                             (line 1821)
53975* warning for comparison of signed and unsigned values: Warning Options.
53976                                                             (line 1156)
53977* warning for overloaded virtual function: C++ Dialect Options.
53978                                                             (line  618)
53979* warning for reordering of member initializers: C++ Dialect Options.
53980                                                             (line  533)
53981* warning for unknown pragmas:           Warning Options.    (line  691)
53982* warning function attribute:            Function Attributes.
53983                                                             (line  166)
53984* warning messages:                      Warning Options.    (line    6)
53985* warnings from system headers:          Warning Options.    (line  843)
53986* warnings vs errors:                    Warnings and Errors.
53987                                                             (line    6)
53988* weak attribute:                        Function Attributes.
53989                                                             (line 1838)
53990* weakref attribute:                     Function Attributes.
53991                                                             (line 1847)
53992* whitespace:                            Incompatibilities.  (line  112)
53993* X in constraint:                       Simple Constraints. (line  124)
53994* X3.159-1989:                           Standards.          (line   13)
53995* x86-64 options:                        x86-64 Options.     (line    6)
53996* x86-64 Options:                        i386 and x86-64 Options.
53997                                                             (line    6)
53998* Xstormy16 Options:                     Xstormy16 Options.  (line    6)
53999* Xtensa Options:                        Xtensa Options.     (line    6)
54000* y0:                                    Other Builtins.     (line    6)
54001* y0f:                                   Other Builtins.     (line    6)
54002* y0l:                                   Other Builtins.     (line    6)
54003* y1:                                    Other Builtins.     (line    6)
54004* y1f:                                   Other Builtins.     (line    6)
54005* y1l:                                   Other Builtins.     (line    6)
54006* yn:                                    Other Builtins.     (line    6)
54007* ynf:                                   Other Builtins.     (line    6)
54008* ynl:                                   Other Builtins.     (line    6)
54009* zero-length arrays:                    Zero Length.        (line    6)
54010* zero-size structures:                  Empty Structures.   (line    6)
54011* zSeries options:                       zSeries Options.    (line    6)
54012
54013
54014
54015Tag Table:
54016Node: Top1934
54017Node: G++ and GCC3700
54018Node: Standards5769
54019Node: Invoking GCC17947
54020Node: Option Summary21692
54021Node: Overall Options61903
54022Node: Invoking G++76141
54023Node: C Dialect Options77664
54024Node: C++ Dialect Options93503
54025Node: Objective-C and Objective-C++ Dialect Options121605
54026Node: Language Independent Options132113
54027Node: Warning Options134312
54028Node: Debugging Options203513
54029Node: Optimize Options260904
54030Ref: Type-punning319573
54031Node: Preprocessor Options397782
54032Ref: Wtrigraphs402564
54033Ref: dashMF407312
54034Ref: fdollars-in-identifiers418176
54035Node: Assembler Options428443
54036Node: Link Options429135
54037Ref: Link Options-Footnote-1440379
54038Node: Directory Options440713
54039Node: Spec Files447272
54040Node: Target Options468670
54041Node: Submodel Options469069
54042Node: AArch64 Options470762
54043Node: Adapteva Epiphany Options474919
54044Node: ARM Options480870
54045Node: AVR Options496732
54046Node: Blackfin Options516850
54047Node: C6X Options524865
54048Node: CRIS Options526408
54049Node: CR16 Options530152
54050Node: Darwin Options531059
54051Node: DEC Alpha Options538496
54052Node: FR30 Options550084
54053Node: FRV Options550649
54054Node: GNU/Linux Options557368
54055Node: H8/300 Options558629
54056Node: HPPA Options560079
54057Node: i386 and x86-64 Options569563
54058Node: i386 and x86-64 Windows Options606649
54059Node: IA-64 Options609505
54060Node: LM32 Options617569
54061Node: M32C Options618093
54062Node: M32R/D Options619367
54063Node: M680x0 Options622913
54064Node: MCore Options636959
54065Node: MeP Options638462
54066Node: MicroBlaze Options642421
54067Node: MIPS Options645217
54068Node: MMIX Options674117
54069Node: MN10300 Options676599
54070Node: Moxie Options679142
54071Node: PDP-11 Options679513
54072Node: picoChip Options681205
54073Node: PowerPC Options683346
54074Node: RL78 Options683567
54075Node: RS/6000 and PowerPC Options684229
54076Node: RX Options723353
54077Node: S/390 and zSeries Options730687
54078Node: Score Options739237
54079Node: SH Options740079
54080Node: Solaris 2 Options760888
54081Node: SPARC Options762119
54082Node: SPU Options775400
54083Node: System V Options780337
54084Node: TILE-Gx Options781163
54085Node: TILEPro Options782087
54086Node: V850 Options782591
54087Node: VAX Options789304
54088Node: VMS Options789839
54089Node: VxWorks Options790650
54090Node: x86-64 Options791805
54091Node: Xstormy16 Options792023
54092Node: Xtensa Options792312
54093Node: zSeries Options796623
54094Node: Code Gen Options796819
54095Node: Environment Variables827372
54096Node: Precompiled Headers835373
54097Node: C Implementation841381
54098Node: Translation implementation843050
54099Node: Environment implementation843624
54100Node: Identifiers implementation844174
54101Node: Characters implementation845228
54102Node: Integers implementation848034
54103Node: Floating point implementation849859
54104Node: Arrays and pointers implementation852788
54105Ref: Arrays and pointers implementation-Footnote-1854223
54106Node: Hints implementation854347
54107Node: Structures unions enumerations and bit-fields implementation855813
54108Node: Qualifiers implementation857799
54109Node: Declarators implementation859571
54110Node: Statements implementation859913
54111Node: Preprocessing directives implementation860240
54112Node: Library functions implementation862345
54113Node: Architecture implementation862985
54114Node: Locale-specific behavior implementation863688
54115Node: C++ Implementation863993
54116Node: Conditionally-supported behavior865275
54117Node: Exception handling865785
54118Node: C Extensions866194
54119Node: Statement Exprs871188
54120Node: Local Labels875647
54121Node: Labels as Values878620
54122Ref: Labels as Values-Footnote-1881145
54123Node: Nested Functions881328
54124Node: Constructing Calls885286
54125Node: Typeof890004
54126Node: Conditionals893312
54127Node: __int128894202
54128Node: Long Long894726
54129Node: Complex896202
54130Node: Floating Types898791
54131Node: Half-Precision899919
54132Node: Decimal Float902101
54133Node: Hex Floats903956
54134Node: Fixed-Point904992
54135Node: Named Address Spaces908274
54136Ref: AVR Named Address Spaces908955
54137Node: Zero Length914161
54138Node: Empty Structures917448
54139Node: Variable Length917854
54140Node: Variadic Macros920530
54141Node: Escaped Newlines922908
54142Node: Subscripting923747
54143Node: Pointer Arith924473
54144Node: Initializers925041
54145Node: Compound Literals925537
54146Node: Designated Inits928898
54147Node: Case Ranges932530
54148Node: Cast to Union933211
54149Node: Mixed Declarations934302
54150Node: Function Attributes934812
54151Node: Attribute Syntax1021368
54152Node: Function Prototypes1031759
54153Node: C++ Comments1033540
54154Node: Dollar Signs1034059
54155Node: Character Escapes1034524
54156Node: Variable Attributes1034818
54157Ref: AVR Variable Attributes1048485
54158Ref: MeP Variable Attributes1051146
54159Ref: i386 Variable Attributes1053092
54160Node: Type Attributes1058756
54161Ref: MeP Type Attributes1072644
54162Ref: i386 Type Attributes1072918
54163Ref: PowerPC Type Attributes1073609
54164Ref: SPU Type Attributes1074471
54165Node: Alignment1074762
54166Node: Inline1076132
54167Node: Volatiles1081107
54168Node: Extended Asm1083989
54169Ref: Example of asm with clobbered asm reg1089893
54170Ref: Extended asm with goto1099600
54171Node: Constraints1107451
54172Node: Simple Constraints1108535
54173Node: Multi-Alternative1115856
54174Node: Modifiers1117573
54175Node: Machine Constraints1120587
54176Node: Asm Labels1171909
54177Node: Explicit Reg Vars1173585
54178Node: Global Reg Vars1175188
54179Node: Local Reg Vars1179684
54180Node: Alternate Keywords1182101
54181Node: Incomplete Enums1183587
54182Node: Function Names1184343
54183Node: Return Address1186504
54184Node: Vector Extensions1190011
54185Node: Offsetof1196186
54186Node: __sync Builtins1196999
54187Node: __atomic Builtins1202469
54188Node: x86 specific memory model extensions for transactional memory1214108
54189Node: Object Size Checking1215370
54190Node: Other Builtins1220859
54191Node: Target Builtins1250003
54192Node: Alpha Built-in Functions1251242
54193Node: ARM iWMMXt Built-in Functions1254251
54194Node: ARM NEON Intrinsics1261231
54195Node: AVR Built-in Functions1469650
54196Node: Blackfin Built-in Functions1472720
54197Node: FR-V Built-in Functions1473337
54198Node: Argument Types1474196
54199Node: Directly-mapped Integer Functions1475948
54200Node: Directly-mapped Media Functions1477030
54201Node: Raw read/write Functions1484062
54202Node: Other Built-in Functions1484974
54203Node: X86 Built-in Functions1486158
54204Node: X86 transactional memory intrinsics1545108
54205Node: MIPS DSP Built-in Functions1547782
54206Node: MIPS Paired-Single Support1560290
54207Node: MIPS Loongson Built-in Functions1561789
54208Node: Paired-Single Arithmetic1568309
54209Node: Paired-Single Built-in Functions1569257
54210Node: MIPS-3D Built-in Functions1571924
54211Node: Other MIPS Built-in Functions1577301
54212Node: picoChip Built-in Functions1577825
54213Node: PowerPC Built-in Functions1579174
54214Node: PowerPC AltiVec/VSX Built-in Functions1582882
54215Node: PowerPC Hardware Transactional Memory Built-in Functions1722673
54216Node: RX Built-in Functions1729646
54217Node: S/390 System z Built-in Functions1733679
54218Node: SH Built-in Functions1738916
54219Node: SPARC VIS Built-in Functions1740309
54220Node: SPU Built-in Functions1745913
54221Node: TI C6X Built-in Functions1747729
54222Node: TILE-Gx Built-in Functions1748753
54223Node: TILEPro Built-in Functions1749870
54224Node: Target Format Checks1750937
54225Node: Solaris Format Checks1751369
54226Node: Darwin Format Checks1751795
54227Node: Pragmas1752613
54228Node: ARM Pragmas1753323
54229Node: M32C Pragmas1753926
54230Node: MeP Pragmas1755000
54231Node: RS/6000 and PowerPC Pragmas1757069
54232Node: Darwin Pragmas1757810
54233Node: Solaris Pragmas1758877
54234Node: Symbol-Renaming Pragmas1760038
54235Node: Structure-Packing Pragmas1761592
54236Node: Weak Pragmas1763242
54237Node: Diagnostic Pragmas1763976
54238Node: Visibility Pragmas1767083
54239Node: Push/Pop Macro Pragmas1767835
54240Node: Function Specific Option Pragmas1768807
54241Node: Unnamed Fields1771064
54242Node: Thread-Local1773292
54243Node: C99 Thread-Local Edits1775397
54244Node: C++98 Thread-Local Edits1777409
54245Node: Binary constants1780853
54246Node: C++ Extensions1781524
54247Node: C++ Volatiles1783235
54248Node: Restricted Pointers1785583
54249Node: Vague Linkage1787174
54250Node: C++ Interface1790798
54251Ref: C++ Interface-Footnote-11795084
54252Node: Template Instantiation1795220
54253Node: Bound member functions1801807
54254Node: C++ Attributes1803339
54255Node: Function Multiversioning1805995
54256Node: Namespace Association1807810
54257Node: Type Traits1809190
54258Node: Java Exceptions1815678
54259Node: Deprecated Features1817068
54260Node: Backwards Compatibility1820033
54261Node: Objective-C1821385
54262Node: GNU Objective-C runtime API1821994
54263Node: Modern GNU Objective-C runtime API1823001
54264Node: Traditional GNU Objective-C runtime API1825438
54265Node: Executing code before main1826166
54266Node: What you can and what you cannot do in +load1828904
54267Node: Type encoding1831294
54268Node: Legacy type encoding1836370
54269Node: @encode1837461
54270Node: Method signatures1838002
54271Node: Garbage Collection1839997
54272Node: Constant string objects1842686
54273Node: compatibility_alias1845194
54274Node: Exceptions1845916
54275Node: Synchronization1848627
54276Node: Fast enumeration1849811
54277Node: Using fast enumeration1850123
54278Node: c99-like fast enumeration syntax1851334
54279Node: Fast enumeration details1852037
54280Node: Fast enumeration protocol1854378
54281Node: Messaging with the GNU Objective-C runtime1857530
54282Node: Dynamically registering methods1858901
54283Node: Forwarding hook1860592
54284Node: Compatibility1863632
54285Node: Gcov1870199
54286Node: Gcov Intro1870732
54287Node: Invoking Gcov1873450
54288Node: Gcov and Optimization1886361
54289Node: Gcov Data Files1889361
54290Node: Cross-profiling1890756
54291Node: Trouble1892607
54292Node: Actual Bugs1894019
54293Node: Interoperation1894466
54294Node: Incompatibilities1901358
54295Node: Fixed Headers1909509
54296Node: Standard Libraries1911172
54297Node: Disappointments1912544
54298Node: C++ Misunderstandings1916902
54299Node: Static Definitions1917713
54300Node: Name lookup1918766
54301Ref: Name lookup-Footnote-11923544
54302Node: Temporaries1923731
54303Node: Copy Assignment1925707
54304Node: Non-bugs1927514
54305Node: Warnings and Errors1938021
54306Node: Bugs1939783
54307Node: Bug Criteria1940347
54308Node: Bug Reporting1942557
54309Node: Service1942778
54310Node: Contributing1943597
54311Node: Funding1944337
54312Node: GNU Project1946826
54313Node: Copying1947472
54314Node: GNU Free Documentation License1985000
54315Node: Contributors2010137
54316Node: Option Index2047539
54317Node: Keyword Index2242297
54318
54319End Tag Table
54320